подскажите пожалуйста с выравниванием
есть файл, в котором данные записаны в формате "32-bit unsigned integer (4-octet)"
к примеру:
00 00 00 02 00 00 00 04 00 00 00 E6есть стуктура:
struct header {
guint32 data1;
guint32 data2;
guint32 data3;
};
открываем и читаем файл fread(&header, sizeof(header),1,fp);
вроду все нормально, но когда делаем вывод считаных значений, то получаем их в таком виде:
data1: 2000000
data1: 4000000
data2: e6000000подскажите, что сделать чтобы получать значения в нормальном виде
покажи формат вывода
>покажи формат выводаprintf("data1: %x\n", header.data1);
какой размер вернул fread ?
>какой размер вернул fread ?fread(&header, sizeof(header),1,fp);
printf("size header = %d byte\n", sizeof header);
printf("data1: %x size:%dbyte\n", header.data1, sizeof header.data1);
printf("data2: %x size:%dbyte\n", header.data2, sizeof header.data1);
printf("data3: %x size:%dbyte\n", header.data3, sizeof header.data1);size header = 12 byte
data1: 2000000 size:4byte
data2: 4000000 size:4byte
data3: e6000000 size:4byte
при чем тут выравнивание? в little endian так и должно быть, превращай в big endian... ntohl() или подобные
>при чем тут выравнивание? в little endian так и должно быть, превращай
>в big endian... ntohl() или подобныебольшое челевоческое спасибо :)
попробуй считать файл не fread-ом, а так :
struct header h;
...
fscanf(FILE *stream, "%o%o%o", &h.data1, &h.data2, &h.data3);
>попробуй считать файл не fread-ом, а так :
>struct header h;
>...
>fscanf(FILE *stream, "%o%o%o", &h.data1, &h.data2, &h.data3);fp = fopen("test2","r");
fscanf(fp, "%o%o%o", &h.data1, &h.data2, &h.data3);
printf("data: %x %x %x\n", h.data1, h.data2, h.data3);
fclose(fp);output: data: bf92a6c8 804850c 0
:(