“\ x”如何在字符串中工作?

时间:2012-04-07 18:41:58

标签: c++ c hex

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

4 个答案:

答案 0 :(得分:9)

根据C99标准(6.4.4.4):

  

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:0)

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

因此字符串“ABC”相当于字符串“\ x414243”

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

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

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

希望解释有所帮助。

答案 3 :(得分:0)

转换是在编译时完成的,这样你手动输入的每个字符串都会带有\x,最终成为它在二进制文件中表示的字符。如果你想在运行时这样做,你需要调用一个像strtol()这样的解析函数,使用base 16传递包含十六进制的字符串并将其转换为char。