什么是十六进制的 CRLF
What is CRLF in hex?
我正在尝试了解有关编码的更多信息,我知道CR
是十六进制0x0d
的,LF
是0x0a
但CRLF
不是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
LF
是char
的,等于十六进制中的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 作为字符集的基础,并可以根据需要对其进行扩展。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何在C++中将十六进制字符串转换为文本数据
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- 绝对编码器十六进制输入
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- C++17 十六进制浮点文字单精度后缀冲突?
- 是否可以在C++中获取 CHAR 的有效十六进制地址?
- 打印十六进制字符
- 什么是十六进制的 CRLF