我正在编写一个C / C ++程序,它涉及将数字的十六进制表示放入字符串中,我对\x
的工作方式感到困惑。我见过人们写过诸如“\ xb2”之类的例子。在这种情况下,如果你想要b的十六进制后跟数字2或者你想要b2的十六进制,程序如何知道?另外,当它将它存储到记忆中时它会保存“\ x”字符还是只保存十六进制表示?
答案 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"
希望解释有所帮助。
答案 3 :(得分:0)
转换是在编译时完成的,这样你手动输入的每个字符串都会带有\x
,最终成为它在二进制文件中表示的字符。如果你想在运行时这样做,你需要调用一个像strtol()
这样的解析函数,使用base 16传递包含十六进制的字符串并将其转换为char。