ネットワーク経由で送信するために、構造体を char 配列に変換しようとしています。ただし、そうすると、char配列から奇妙な出力が得られます。
#include <stdio.h>
struct x
{
int x;
} __attribute__((packed));
int main()
{
struct x a;
a.x=127;
char *b = (char *)&a;
int i;
for (i=0; i<4; i++)
printf("%02x ", b[i]);
printf("\n");
for (i=0; i<4; i++)
printf("%d ", b[i]);
printf("\n");
return 0;
}
ax のさまざまな値の出力を次に示します (gcc を使用する X86 で):
127:
7f 00 00 00
127 0 0 0
128:
ffffff80 00 00 00
-128 0 0 0
255:
フフフフフ 00 00 00
-1 0 0 0
256:
00 01 00 00
0 1 0 0
127 と 256 の値は理解できますが、128 になると数値が変わるのはなぜですか? 80 00 00 00 128 0 0 0 ではない理由
変換プロセスで何かをするのを忘れていますか、それとも整数表現について何かを忘れていますか?
*注: これは小さなテスト プログラムです。実際のプログラムでは、構造体にもっと多くの変数名があり、リトルエンディアンに変換します。
*編集:フォーマット