|
char TempBuf[10+5+5+5+5+1]; /* TempBufを初期化 */ memset(TempBuf, 0x00, sizeof(TempBuf)); /* TempBufに設定 */ sprintf(TempBuf, "%d%d%d%d%d", tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5); この時TempmBufの大きさは longを整数にした時の最大桁数 + shortを整数にした時の最大桁数 shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数 shortを整数にした時の最大桁数 + 改行(\r) です。 |
|
すいません。訂正です。 >この時TempmBufの大きさは >longを整数にした時の最大桁数 + shortを整数にした時の最大桁数 + >shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数 + >shortを整数にした時の最大桁数 + 改行(\r) >です。 改行(\r)でなくてNULL文字(\0)でした。 |
|
> sprintf(TempBuf, "%d%d%d%d%d", > tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5); この方針は、 >>1512 gixs の最後で書いた、数値を文字列として渡す方法ですね。 (つまり、数値10を0x31 0x30のバイト列にしてしまう方法です) 受け手は、自前のパーサなりsscanf(3)なりで、パースして数値に戻します。 でも、"%d%d%d%d%d"ではパースできません。 ゼロ詰めで桁数を決め打ちするか、空白で区切るべきでしょう。 このように文字列で渡す方針が簡単なので、実用アプリならこうすべきですが、どうしても数値のままネットワーク上に流したいとのことなら、ネットワークバイトオーダに変換しながらmemcpy(3)(or memmove(3))します。 # 動かないコードでもいいように、疑似コード(エラー処理なし)。 # および、勝手に、uint32_t tes_s.test1; uint16_t tes_s.test2;ということにします。 char *p = buf; uint32_t x32 = htons(tes_s.test1); memcpy(p, &x32, sizeof(uint32_t)); p += sizeof(uint32_t); uint16_t x16 = htons(tes_s.test2); memcpy(p, &x16, sizeof(uint16_t)); p += sizeof(uint16_t); ... write(sock, buf, p - buf); 受け手は、どういうbit数の数値がどう並んでいるかを知った上で、受けたバッファから数値を切り出していきます。 |
|
ひとつ訂正。 最初のhtons()はhtonl()。 # 掲示板への書き込みは難しいですね。他にもミスがあるかも。 |
|
Perlで system関数||die"$!\n"||exit(0); を使用すると「ファイル番号が違います」とエラーメッセージがでて以上終了を起こします。 こういったエラーの理由が分かるサイトなどありましたら教えて下さい。 またこのエラーの原因をご存知の方がいましたら原因を教えて下さい。 お願いします。 |
|
はじめまして。 perlで、メール本文の内容を分析し、 mimeまたは、プレーンテキストの初めの文書の最終行番号、 mimeのときにテキストがなければ、最初の本文の行番号というように 調べたいのですが、どうすればよいのかわからなくて困っています。 なにか便利なツール、パッケージなどあれば教えてください。 それか調べるポイントでもあれば教えてください。 どうかよろしくお願いします。 |