Я пытаюсь преобразовать структуру в массив символов для отправки по сети. Тем не менее, я получаю странный вывод из массива 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;
}
Вот вывод для различных значений a.x (на X86 с использованием 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
Я понимаю значения для 127 и 256, но почему цифры меняются при переходе на 128? Почему бы просто не быть:
80 00 00 00
128 0 0 0
Я забыл что-то сделать в процессе преобразования или я забыл что-то о целочисленном представлении?
* Примечание: это всего лишь небольшая тестовая программа. В реальной программе у меня больше структуры, лучше имена переменных, и я конвертирую в little-endian.
* Редактировать: форматирование