Вы не можете записывать двоичные данные и ожидать, что они будут текстовыми.Поведение, которое вы видите, нормальное, ожидаемое и правильное.
В качестве примера представим число 30000
.Это легко поместится в двухбайтовом short int
.Однако в текстовом формате у вас есть как минимум пять байтов.Если вы fwrite()
два байта для внешнего хранилища, это будут два байта, содержащие числовое значение этих байтов, а не текстовое представление каждой цифры.
В примере 30000
двоичное представление равно 01110101 00110000
.В машинах Intel это полностью изменено, потому что они little-endian .Это означает, что эти два байта в вашем файле, вероятно, являются десятичными 48 и 118. Если вы просматриваете их как символы на ПК, который изначально использовал ASCII, они должны отображаться как 0
и v
, соответственно.