The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"С, выравнивание int (32bit) "
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"С, выравнивание int (32bit) "  
Сообщение от Алексей email(??) on 24-Янв-08, 07:58 
подскажите пожалуйста с выравниванием
есть файл, в котором данные записаны в формате "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

подскажите, что сделать чтобы получать значения в нормальном виде

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "С, выравнивание int (32bit) "  
Сообщение от Volody on 24-Янв-08, 10:20 
покажи формат вывода

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "С, выравнивание int (32bit) "  
Сообщение от Алексей email(??) on 24-Янв-08, 10:25 
>покажи формат вывода

printf("data1: %x\n", header.data1);

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "С, выравнивание int (32bit) "  
Сообщение от Volody on 24-Янв-08, 10:29 
какой размер вернул fread ?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "С, выравнивание int (32bit) "  
Сообщение от Алексей email(??) on 24-Янв-08, 10:44 
>какой размер вернул 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "С, выравнивание int (32bit) "  
Сообщение от Av (??) on 24-Янв-08, 10:51 
при чем тут выравнивание? в little endian так и должно быть, превращай в big endian... ntohl() или подобные
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "С, выравнивание int (32bit) "  
Сообщение от Алексей email(??) on 24-Янв-08, 11:06 
>при чем тут выравнивание? в little endian так и должно быть, превращай
>в big endian... ntohl() или подобные

большое челевоческое спасибо :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "С, выравнивание int (32bit) "  
Сообщение от Volody on 24-Янв-08, 10:44 
попробуй считать файл не fread-ом, а так :
struct header h;
...
fscanf(FILE *stream, "%o%o%o", &h.data1, &h.data2, &h.data3);
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "С, выравнивание int (32bit) "  
Сообщение от Алексей email(??) on 24-Янв-08, 10:59 
>попробуй считать файл не 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
:(

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру