> 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数の数値がどう並んでいるかを知った上で、受けたバッファから数値を切り出していきます。 |