Что такое CRLF в гексе? - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь узнать больше о кодировании, я знал, что CR - это 0x0d в шестнадцатеричном формате, а LF - это 0x0a, но CRLF - это не 0x0d 0x0a и не 0x0d0a, я пыталсяstd::cout << std::hex << (int)'\r\n' в C ++, и результат был 0x0d.

Итак, CRLF == CR?и являются ли эти шестнадцатеричные значения одинаковыми во всех операционных системах?

Редактировать

Ниже приведен результат при попытке на компьютере с Windows 10 с использованием MSVC (v16.2.0-pre.2.0)

const char crlf = '\r\n';
std::cout << std::hex << (int)crlf << std::endl;
std::cout << std::hex << (int)'\r\n' << std::endl;
std::cout << std::hex << (int)'\n\r' << std::endl;

вывод

d
a0d
d0a

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Если вы напишите ‘\ r \ n’, ваш компилятор должен согреть вас, поскольку это многосимвольный литерал, который зависит от реализации и обычно не используется из-за этого. В этом случае похоже, что компилятор отбросил другие символы.

Да CR равно 0xd, а LF равно 0xa в стандарте ASCII. Стандарт C не требует ASCII сам по себе, насколько я знаю, поэтому теоретически они могут быть чем-то другим. Вот почему мы пишем \n вместо 0xa (также для ясности). Но практически каждая используемая система теперь использует ASCII в качестве основы для набора символов и может расширять его при необходимости.

0 голосов
/ 23 июня 2019

Заключение

CR равно char и равно 0x0d в шестнадцатеричном формате

LF равно char и равно 0x0aв шестнадцатеричном виде

CRLF - это последовательность символов, и она равна CR LF по отдельности, поэтому она равна 0x0d 0x0a в шестнадцатеричном виде (как упомянуто @tkausl)

Объяснение полученного результата состоит в том, что const char crlf = '\r\n'; будет скомпилирован в \n (при компиляции MSVC)

, когда я посмотрел на вывод сборки, я нашел этот комментарий ; 544 : // doing \r\n -> \n translation

спасибо за все полезные комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...