十六进制的CRLF是什么?

时间:2019-06-23 06:50:50

标签: c++ character-encoding

我正尝试学习有关编码的更多信息,我知道CR0x0d的十六进制,而LF0x0a,但是CRLF不是{ {1}}而不是0x0d 0x0a,我在C ++中尝试了0x0d0a,结果是std::cout << std::hex << (int)'\r\n'

那么0x0d == CRLF吗?这些十六进制值在所有操作系统上都一样吗?

修改

以下是在Windows 10计算机上使用MSVC(v16.2.0-pre.2.0)尝试时的结果

CR

输出

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;

2 个答案:

答案 0 :(得分:1)

如果您编写“ \ r \ n”,则编译器应该对您有所帮助,因为这是一个多字符文字,它是特定于实现的,因此通常不使用。在这种情况下,编译器似乎丢弃了其他字符。

是,在ASCII标准中,CR为0xd,LF为0xa。据我所知,C标准本身并不需要ASCII,因此从理论上讲它们可以是其他名称。这就是为什么我们写\n而不是0xa的原因(也是为了清楚起见)。但是实际上,现在使用的每个系统都使用ASCII作为字符集的基础,并且可以根据需要扩展它。

答案 1 :(得分:0)

结论

CRchar,等于十六进制的0x0d

LFchar,等于十六进制的0x0a

CRLF是一个字符序列,并且分别等于CR LF,因此等于十六进制的0x0d 0x0a(如@tkausl所述)< / p>

我得到的结果的解释是const char crlf = '\r\n';将被编译为\n(由MSVC编译时)

当我查看程序集输出时,我发现该注释; 544 : // doing \r\n -> \n translation

感谢所有有用的评论。