什么是十六进制的 CRLF

What is CRLF in hex?

本文关键字:CRLF 十六进制 什么      更新时间:2023-10-16

我正在尝试了解有关编码的更多信息,我知道CR是十六进制0x0d的,LF0x0aCRLF不是0x0d 0x0a也不是0x0d0a,我在C++中尝试了std::cout << std::hex << (int)'rn',结果是0x0d

那么,CRLF==CR吗? 这些十六进制值在所有操作系统上都相同吗?

编辑

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

const char crlf = 'rn';
std::cout << std::hex << (int)crlf << std::endl;
std::cout << std::hex << (int)'rn' << std::endl;
std::cout << std::hex << (int)'nr' << std::endl;

输出

d
a0d
d0a

结论

CR char等于十六进制中的0x0d

LFchar的,等于十六进制中的0x0a

CRLF是一个字符序列,它相等CR LF分开,因此它等于十六进制中的0x0d 0x0a(如@tkausl所述(

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

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

感谢所有有用的评论。

如果你写'\r',你的编译器应该温暖你,因为这是一个多字符文字,它是特定于实现的,因此通常不使用。在这种情况下,编译器似乎丢弃了其他字符。

是的,CR是0xd的,LF是 ASCII 标准中的0xa。据我所知,C 标准本身不需要 ASCII,所以理论上它们可能是别的东西。这就是为什么我们写n而不是0xa(也是为了清楚起见(。但实际上,现在使用的每个系统都使用 ASCII 作为字符集的基础,并可以根据需要对其进行扩展。