В чем разница между открытым текстом и двоичными данными? - PullRequest
16 голосов
/ 16 сентября 2009

Многие языки имеют функции, которые обрабатывают только "открытый текст", а не двоичные. Означает ли это, что разрешены только символы в диапазоне ASCII?

Двоичный код - это просто серия байтов, не похож ли он на обычный текст, который представляет собой просто серию байтов, интерпретируемых как символы? Итак, может ли обычный текст хранить те же форматы данных / протоколы, что и двоичный файл?

Ответы [ 5 ]

10 голосов
/ 16 сентября 2009

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

Попробуйте открыть файл JPEG с помощью текстового редактора (например, блокнота или VIM), и вы поймете, что я имею в виду.

Бинарный файл обычно создается таким образом, чтобы оптимизировать скорость, поскольку анализ не требуется. Простой текстовый файл можно редактировать вручную, двоичный файл - нет.

7 голосов
/ 16 сентября 2009

«Открытый текст» может иметь несколько значений.

Одним из наиболее полезных в этом контексте является то, что это просто двоичные файлы, организованные в виде байтовых последовательностей, которые конкретная компьютерная система может преобразовать в конечный набор символов, которые она считает «текстовыми».

Второе значение, в некоторой степени связанное, - это ограничение, согласно которому указанная система должна отображать эти «текстовые символы» как символы, читаемые человеком в качестве элементов распознаваемого алфавита. Зачастую неписаным подтекстом является то, что механизм перевода - ASCII.

Третий, еще более ограничительный смысл, заключается в том, что эта система должна быть «простым» текстовым редактором / средством просмотра. Обычно подразумевается кодировка ASCII. Но, на самом деле, ОЧЕНЬ мало разницы между вами, человеком, читающим текст, закодированный в каком-то необычном формате и отображаемый проприетарной программой, и текстовым редактором VI, читающим файл в кодировке ASCII.

В контексте программирования ваша среда программирования (созданная с помощью OS + системные API + ваши языковые возможности) определяет как набор «текстовых» символов, так и набор кодировок, которые он может читать для преобразования к этим «текстовым» персонажам. Пожалуйста, обратите внимание, что это не обязательно подразумевает ASCII, английский или 8 бит - в качестве примера, Perl может изначально читать и использовать полный набор «символов» Unicode.

Чтобы ответить на ваш конкретный вопрос, вы определенно можете использовать «символьные» строки для передачи произвольных последовательностей байтов с оговоркой, которую должны применять соглашения о прекращении строк. Проблема в том, что функции, которые уже существуют для «обработки символьных данных», вероятно, не будут иметь никакой полезной функциональности для работы с вашими двоичными данными.

4 голосов
/ 16 сентября 2009

Часто это означает, что язык может свободно интерпретировать контрольные символы certian, такие как значения 10 или 13, как терминаторы логических строк. Другими словами, операция вывода может автоматически добавлять эти символы в конце, а операция ввода может удалять их из ввода (и / или заканчивать чтение там).

Напротив, языковые операции ввода-вывода, которые объявляют работу с «двоичными» данными, обычно включают входной параметр для длины данных, с которыми нужно работать, поскольку нет другого способа (кроме чтения за концом файла) знать, когда это будет сделано.

3 голосов
/ 16 сентября 2009

Технически ничего. Простой текст - это форма двоичных данных. Однако основное отличие заключается в том, как хранятся значения. Подумайте, как можно хранить целое число. В двоичных данных он будет использовать формат дополнения до двух, вероятно, занимая 32 бита. В текстовом формате номер будет храниться в виде последовательности юникодных цифр. Таким образом, число 50 будет храниться как 0x32 (дополняется до 32 бит) в двоичном виде, но будет храниться как '5' '0' в виде простого текста.

3 голосов
/ 16 сентября 2009

Как правило, это зависит от языка / среды / функциональности.

Двоичные данные всегда таковы: двоичные. Передано без изменений.

Режим «Простой текст» может означать одну или несколько из следующих вещей:

  • поток байтов разбит на строки. Разделителями строк являются \ r, \ n, или \ r \ n, или \ n \ r. Иногда это зависит от ОС (например, * nix любит \ n, в то время как Windows любит \ r \ n). Конец строки может быть скорректирован для приложения чтения
  • кодировка символов может быть скорректирована. Среда может обнаружить и / или преобразовать исходную кодировку в кодировку, ожидаемую приложением
  • возможно, некоторые другие преобразования должны быть добавлены в этот список, но я не могу больше думать о них сейчас
...