Разница между двоичным и текстовым файлами с точки зрения хранения?

#c #text #binary #byte #bits

#c #текст #двоичный #байт #бит

Вопрос:

Я хочу задать несколько вопросов о битах и байтах, поскольку я очень смущен.

  1. Например, предположим, что у меня есть short int x = 345; . Я знаю, что short занимает 16 бит, поэтому, когда я записываю short в файл, он записывается как char ‘3’ , ‘4’ ,’5′ каждый из них содержит 1 байт, то есть всего 24 бита. Есть ли способ записать число (короткое целое число) в файл как короткое целое число, принимающее 16 бит?

  2. Также я прав в своей концепции? В чем будет разница при записи в мой файл, если файл двоичный или текстовый в байтах?

Ответ №1:

Да, есть способ.

 uint16_t sh = 345;
fwrite(amp;sh, sizeof(sh), 1, fp);
  

В упомянутом вами случае 345 записывается в виде текста (например, ASCII, если это то, что вы используете). В примере, который я опубликовал, двоичное представление sh записывается в файл, и оно займет всего 2 байта.

В чем будет разница при записи в мой файл, если файл двоичный или текстовый в байтах?

  1. Запись текста ( fprintf )

     0000000: 00110011 00110100 00110101
                3        4        5
      
  2. Двоичная запись ( fwrite )

     0000000: 01011001 00000001
    #Little endian. Read as: 00000001 01011001 = 345
      

Если проблема с совместимостью (т. Е. Вы хотите отправить файл на другой компьютер), текстовый формат является лучшим выбором, поскольку он переносим.

Комментарии:

1. @mainajaved Это просто сокращение в конце строки. Я отредактировал свой ответ 🙂

Ответ №2:

Если вы записываете значение в виде строки, оно будет занимать не менее трех байт для трех цифр; часто также используется символ новой строки или пробел, чтобы отметить конец значения.

Да, вы можете записать значение в 2 байта. Одним из способов было бы:

 fwrite(amp;x, sizeof(x), 1, fp);
  

Разница между двоичным и текстовым файлами заключается в том, что вы можете передавать текст между различными типами машин практически безнаказанно, и все машины будут интерпретировать данные одинаково. Двоичный файл может быть интерпретирован только на машинах, которые имеют одинаковый порядковый номер (большой порядковый номер или не Intel против малого порядкового номера или Intel). На машинах другого класса вам нужно поменять порядок байтов, чтобы правильно интерпретировать двоичные данные.