С-программа Чтение значений Hex из Fat MBR
Я новичок в языке C и пытаюсь создать инструмент судебной экспертизы. Пока у меня есть это. Он читает файл dd, который является дампом MBR fat16. Я могу правильно прочитать некоторые байты, но не некоторые.
В чем я нуждаюсь, так это в том, что переменная SizeOfFat должна получить значения байтов 0x16 и 0x17, считанные с прямым порядком байтов. Как бы я прочитал FB00, а затем преобразовать его в 00FB и затем вывести значение?
char buf[64];
int startFat16 = part_entry[0].start_sect,sectorSize = 512,dirEntrySize=32;
fseek(fp, startFat16*512, SEEK_SET);
fread(buf, 1, 64, fp);
int rootDir = *(int*)(buf+0x11);
int sectorPerCluster = *(int*)(buf+0x0D);
int sizeOfFat = *(int*)(buf+0x16);
int fatCopies = *(int*)(buf+0x10);
printf("\n Phase 2 \n no of sectors per cluster : %d \n",(unsigned char)sectorPerCluster);
printf("size of fat : %d \n",(unsigned char)sizeOfFat);
printf("no of Fat copies : %d \n",(unsigned char)fatCopies);
printf("maximum number of root directories : %d \n",(unsigned char)rootDir);
Шестнадцатеричные значения, с которыми я работаю, -
EB 3C 90 4D 53 44 4F 53 35 2E 30 00 02 08 02 00
02 00 02 00 00 F8 FB 00 3F 00 FF 00 3F 00 00 00
E1 D7 07 00 80 00 29 CD 31 52 F4 4E 4F 20 4E 41
1 ответ
С int
, вы получили только гарантию того, что он может содержать 32-разрядные целые числа со знаком. С вашим кодом вы читаете sizeof(int)
байты для каждой из ваших переменных, даже если они различаются по размеру. Есть uint16_t
, uint8_t
, uint32_t
типы в большинстве систем. Используйте их для данных фиксированной ширины. Обратите внимание, что они не подписаны. Вы не хотите отрицательных секторов на кластер, не так ли?