Почему Fread читает unsigned-int в обратном порядке? - PullRequest
0 голосов
/ 24 февраля 2019

Мой двоичный файл содержит

0400 0000 0000 0000 0400 0000 0000 0000

Когда я использую следующий код для чтения первых 4 байтов в беззнаковом int inputInteger

FILE *inputFile;
inputFile = fopen("./Debug/rnd_2", "rb");
unsigned int inputInteger = 0;
fread(&inputInteger, sizeof(unsigned int), 1, inputFile);
fclose(inputFile);
exit(0);

Что я получаю, это inputInteger == 4.Разве это не было 1024, учитывая, что битовая позиция 00000100 00000000?

Насколько я понимаю, первые четыре байта 0400 0000

РЕДАКТИРОВАТЬ: Код и формулировкивопроса

1 Ответ

0 голосов
/ 25 февраля 2019

fread прочитайте символы по порядку и расположите их в том же порядке в месте назначения, поэтому для одного и того же файла результат не будет одинаковым для младшего и старшего порядкового номера, когда вы будете считать результат обратнокак int

это точно так же, как если бы вы сделали

char * p = (char *) &number;

p[0] = fgetc(file);
p[1] = fgetc(file);
...
p[sizeof(int) - 1] = fgetc(file);

(предположим, что в файле достаточно символов)

Получается, что прочитанное число равно 4. Разве биты 0000 0100 0000 0000 == 1024?

зависят от того, является ли вы младшим или старшим порядковым номером, это 1024 или 64


Обновление после редактирования вопроса

Мой двоичный файл содержит

0400 0000 0000 0000 0400 0000 0000 00000000 0000

в то время, как вы, кажется, даете значенияв гекса (не в базе 2, как ранее), то есть вы имеете в виду, что ваш файл содержит

04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

символ находится на 8 битах, а не на 16

  • , если в 32-разрядном младшем порядкеs, который дает 4 + (0 << 8) + (0 << 16) + (0 << 24) = 4 </p>

  • , если старший байтовый код на 32 бита, который дает (4 <<24) + (0 << 16) + (0 << 8) + 0 = 16384 </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...