вывод файла fwrite неверен

Я пытаюсь записать двоичное представление целого числа в файл, приняв, что получу шестнадцатеричный формат в файле, однако я не получаю ожидаемого результата.

uint32_t a = 1;
FILE * file = fopen("out.txt", "ab+");
fwrite(&a, sizeof(uint32_t), 1, file );

Я ожидаю получить (с прямым порядком байтов)

1000 0000

но вместо этого я попадаю в файл

0100 0000 

Машина, на которой работает этот фрагмент кода, — Ubuntu linux 32 бит (с прямым порядком байтов). Есть ли кто-нибудь, кто мог бы объяснить, почему это так, соответствует ли содержимое файла целочисленному представлению на моей машине? Ваше здоровье.


person maximegir    schedule 25.09.2014    source источник


Ответы (1)


Предполагая, что каждая из этих групп из двух цифр является байтом, то, что вы видите, верно:

01 00 00 00

Little endian упорядочивает байты, а не кусает внутри байтов. Итак, что у вас есть:

01 00 00 00
|| || || ||
|| || || == -> 0 * 256 * 256 * 256
|| || == ----> 0 * 256 * 256
|| == -------> 0 * 256
== ----------> 1
person paxdiablo    schedule 25.09.2014
comment
Спасибо за ваше любезное объяснение. - person maximegir; 25.09.2014