Ich versuche, eine Struktur in ein Char-Array zu konvertieren, um über das Netzwerk zu senden. Allerdings bekomme ich einige seltsame Ausgabe von der Char-Array, wenn ich tun.
#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;
}
Hier ist die Ausgabe für verschiedene Werte von a.x (auf einem X86 mit gcc):
127:
7f 00 00 00
127 0 0 0
128:
ffffff80 00 00 00
-128 0 0 0
255:
ffffffff 00 00 00
-1 0 0 0
256:
00 01 00 00
0 1 0 0
Ich verstehe die Werte für 127 und 256, aber warum ändern sich die Zahlen beim Übergang zu 128? Warum sollte es nicht einfach sein: 80 00 00 00 128 0 0 0
Habe ich bei der Konvertierung etwas vergessen, oder habe ich etwas über die Darstellung ganzer Zahlen vergessen?
*Anmerkung: Dies ist nur ein kleines Testprogramm. In einem echten Programm habe ich mehr in der Struktur, bessere Variablennamen, und ich konvertiere in Little-Endian.
*Bearbeitung: Formatierung