PDA

Просмотр полной версии : чтение int бинарно из файла


cupper
26.03.2009, 16:10
Нужно бинарно считать файл, структуру файла знаю.
Первым значением идет unsugned int.
Вот началные байты 0x00, 0x00, 0x08, 0x01 это число 2049. А в переменно после считывания храниться число 17301504 это как раз если в байтах 01 08 00 00, в точности наоборот.
Есть ряд функци меняющий порядок байт в числе, из низх по иписанию подходит
ntohl - осуществляет перевод целого длинного числа из сетевого порядка байт в порядок байт, принятый на компьютере
но она кажеться только дя MVS.
как можно считать int из файл в бинарном режиме чтобы получить число которое там записано

SmanxX1
26.03.2009, 16:58
FILE* fp;
unsigned int var;

fp=fopen(szFileName,"rb");
fseek(fp,0,SEEK_SET);
fread(&var, sizeof(unsigned int),1,fp);
fclose(fp);
Прочитает uint32.

И не стоит путать способы хранения переменных в файлах и в памяти!

Для проверки можно сделать так:
printf("var=%#2.2x",var);

FoX's
26.03.2009, 21:54
ntohl - осуществляет перевод целого длинного числа из сетевого порядка байт в порядок байт, принятый на компьютере
но она кажеться только дя MVS.
Import Library: Link with ws2_32.lib ;)
можно как замену использовать:
long _ntohl(long toswap)
{
__asm
{
mov eax,toswap
bswap eax

}
}

cupper
26.03.2009, 22:55
Import Library: Link with ws2_32.lib
в DEV-C++ незнаю как присоединить, в MVS непомогло.

St0nX
27.03.2009, 00:24
#pragma comment(lib,"ws2_32.lib")