Разница между двоичным и текстовым файлом с точки зрения хранения? - PullRequest
0 голосов
/ 18 октября 2011

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

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

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

Ответы [ 2 ]

4 голосов
/ 18 октября 2011

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

uint16_t sh = 345;
fwrite(&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
    

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

0 голосов
/ 18 октября 2011

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

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

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

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

...