我需要用HEX格式定义特殊字符创建字符串:
std::string s = "xFEd" ;
error C2022: '65242' : too big for character
在std::string s = "xFE d" ;
的情况下一切都很好。如何告诉字符串构造器对待"d"作为字符串"d",而不是数字定义字符在第一种情况下?
你在标签中写了"visual c++ ",所以我假设微软编译器来自visual Studio。
请查看本网站的参考资料和示例。它告诉你应该用什么,但似乎…有个小虫子。例如:
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上找到了确切的答案:短信息和长信息。从后者摘录:
使用内嵌的十六进制转义码指定字符串常量可能导致意外结果。下面的示例试图创建一个字符串字面值,它包含ASCII 5字符,后面跟着字符f、i、v和e:
"x05five"
实际结果是十六进制的5F,它是下划线的ASCII码,后面跟着字符i、v和e。要获得正确的结果,可以使用以下方法之一:
" 05five" // Use octal constant.
"x05" "five" // Use string splicing.