使用HEX定义使用ESC命令创建字符串

时间:2015-06-10 07:08:53

标签: c++ visual-c++

我需要使用HEX格式定义的特殊字符串创建字符串:

std::string s = "\xFEd" ; 
error C2022: '65242' : too big for character

如果std::string s = "\xFE d" ;一切顺利。如何告诉字符串构造函数将“d”视为字符串“d”而不是第一种情况下的数字定义字符?

1 个答案:

答案 0 :(得分:1)

您在标签“visual C ++”中写道,因此我假设使用Visual Studio中的Microsoft编译器。

请查看参考资料和示例at this site。它告诉你应该使用什么,但它似乎......一个小马车。例如:

octal              \ooo
hexadecimal        \xhhh     <- note the 3 Hs
Unicode (UTF-8)    \uxxxx
Unicode (UTF-16)   \Uxxxxxxxx

以后几次降价,例如:

  

十六进制转义序列是一个反斜杠后跟字符x,后跟一个十六进制数字序列。不包含十六进制数字的转义序列会导致编译器错误C2153:“十六进制常量必须在至少一个十六进制数字“。具有十六进制和非十六进制字符的转义序列被计算为最后一个非十六进制字符。 最高十六进制值为0xff

char c1 = '\x0050';  // char 'P'    <-- note 4 digits as 1 char
char c2 = '\x0pqr';  // char 'r'

注意\x0pqr的事情。有趣!我怀疑编译错误,但没有!

(..)

我刚刚在MSDN上找到了确切答案:short infolong info。从后者来看:

  

使用嵌入式十六进制转义码来指定字符串常量可能会导致意外结果。以下示例旨在创建一个包含ASCII 5字符的字符串文字,后跟字符f,i,v和e:

"\x05five"
  

实际结果是十六进制5F,它是下划线的ASCII码,后跟字符i,v和e。要获得正确的结果,您可以使用以下方法之一:

"\005five"     // Use octal constant.  
"\x05" "five"  // Use string splicing.