我想将CTRL-A(0x01)存储在C ++字符串中。尝试以下,但它不起作用。你能告诉我在这里缺少什么吗?
string s = "\u0001";
在g ++中编译时出现错误:
error: \u0001 is not a valid universal character
答案 0 :(得分:5)
由于你的十六进制值已经很简单了:
std::string s = "\x01";
这适用于任何十六进制char字面值。一般格式为\x<hex number>
。
答案 1 :(得分:5)
你得到的错误是由于C ++ 03中的2.2 / 2:
如果通用字符名称的十六进制值小于 0x20 或在0x7F-0x9F(包括)范围内,或者如果是通用的 字符名称表示基本源字符中的字符 设置,然后该程序是不正确的。
因此,对于字符串文字,您必须使用\x1
或\1
代替(并且您可以添加前导零来品尝)。或者,如果您只需要字符串中的一个字符:
string s;
s.push_back(1);
或:
string s(1,1);
在C ++ 11(2.3 / 2)中放宽了限制:
如果通用字符名称的十六进制值在...之外 c-char-sequence,s-char-sequence或r-char-sequence of a character或 string literal 对应一个控制字符(在任一个中 范围0x00-0x1F或0x7F-0x9F(包括两者)或者包含在中的字符 基本的源字符集,程序是不正确的。
答案 2 :(得分:2)
您可以使用
std::string s = "\001";
请注意,代码是八进制的。
答案 3 :(得分:2)
string
存储ASCII字符;编译器需要从输入字符集转换为ASCII。此映射是实现定义;您的编译器供应商似乎决定不从U + 0001映射到ASCII 0x01。
您应该能够使用
初始化字符串string s = "\001";