我正尝试学习有关编码的更多信息,我知道CR
是0x0d
的十六进制,而LF
是0x0a
,但是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;
答案 0 :(得分:1)
如果您编写“ \ r \ n”,则编译器应该对您有所帮助,因为这是一个多字符文字,它是特定于实现的,因此通常不使用。在这种情况下,编译器似乎丢弃了其他字符。
是,在ASCII标准中,CR
为0xd,LF
为0xa。据我所知,C标准本身并不需要ASCII,因此从理论上讲它们可以是其他名称。这就是为什么我们写\n
而不是0xa
的原因(也是为了清楚起见)。但是实际上,现在使用的每个系统都使用ASCII作为字符集的基础,并且可以根据需要扩展它。
答案 1 :(得分:0)
结论
CR
是char
,等于十六进制的0x0d
LF
是char
,等于十六进制的0x0a
CRLF
是一个字符序列,并且分别等于CR
LF
,因此等于十六进制的0x0d
0x0a
(如@tkausl所述)< / p>
我得到的结果的解释是const char crlf = '\r\n';
将被编译为\n
(由MSVC编译时)
当我查看程序集输出时,我发现该注释; 544 : // doing \r\n -> \n translation
感谢所有有用的评论。