10

我正在编写一个 C/C++ 程序,该程序涉及将数字的十六进制表示形式放入字符串中,我对如何\x工作感到困惑。我见过人们写诸如“\xb2”之类的东西的例子。在这种情况下,程序如何知道您想要 b 的十六进制后跟数字 2 还是想要 b2 的十六进制?此外,当它将它存储到内存中时,它是保存“\x”字符还是只保存十六进制表示?

4

4 回答 4

9

从 C99 标准(6.4.4.4):

每个八进制或十六进制转义序列都是可以构成转义序列的最长字符序列。

于 2012-04-07T18:43:43.857 回答
5

例如,字符串"123\x45"以十六进制存储为31 32 33 45.

根据 Oli 的回答,使用 '\x' 之后的最长有效值。

'\x' 未存储。任何转义序列都不会存储您在屏幕上看到的字符,它会存储指定的实际字符。例如,'\n' 实际上存储为换行符 0x0A。

于 2012-04-07T18:51:27.543 回答
2

当您在字符串中使用转义序列 \x 时,\x 后面的数据实际上存储在它的二进制表示中。

所以字符串“ABC”等价于字符串“\x414243”

如果要以显示字符形式发出十六进制值,则需要使用 %x 或 %X 格式说明符字符:

printf("%X%X%X", 'A', 'B', 'C');    // emits "414243"

请参阅C 库参考指南的第1.2.6节和第1.2.7节

希望解释有所帮助。

于 2012-04-07T18:51:38.487 回答
0

翻译是在编译时完成的,因此您手动输入到源代码中的每个字符串\x最终都是它在二进制文件中表示的字符。如果要在运行时执行此操作,则需要调用解析函数,例如strtol()使用 base 16 传递包含十六进制的字符串并将其转换为字符。

于 2012-04-07T18:57:31.497 回答