Поскольку вы открываете файл в текстовом режиме, он преобразует маркеры конца строки, такие как LF, в CR / LF.
Это вероятно, если вы работаете в Windows (и, вероятно, если вы, учитывая, что имя вашего файла начинается с "c:\"
).
Если вы откроете файл в режиме "wb"
, я подозреваю, что вы обнаружите, что числа идентичны:
FILE* test = fopen("C:\\core.u", "wb");
В стандарте C99 это сказано в 7.19.5.3 The fopen function
:
Режим аргумента указывает на строку. Если строка является одной из следующих, файл
открыть в указанном режиме. В противном случае поведение не определено.
r
открыть текстовый файл для чтения
w
усечь до нулевой длины или создать текстовый файл для записи
a
append; открыть или создать текстовый файл для записи в конце файла
rb
открыть бинарный файл для чтения
wb
усечь до нулевой длины или создать двоичный файл для записи
ab
append; открыть или создать двоичный файл для записи в конце файла
r+
открыть текстовый файл для обновления (чтение и запись)
w+
усечь до нулевой длины или создать текстовый файл для обновления
a+
append; открыть или создать текстовый файл для обновления, писать в конце файла
r+b
или rb+
открытый двоичный файл для обновления (чтение и запись)
w+b
или wb+
обрезать до нулевой длины или создать двоичный файл для обновления
a+b
или ab+
append; открыть или создать двоичный файл для обновления, записав его в конец файла
Вы видите, что они различают w
и wb
. Я не верю, что реализация требуется для различного отношения к ним, но обычно безопаснее использовать двоичный режим для двоичных данных.