如何在C ++字符串中存储CTRL-A(0x01)?

时间:2011-11-02 11:43:50

标签: c++ string character-encoding escaping

我想将CTRL-A(0x01)存储在C ++字符串中。尝试以下,但它不起作用。你能告诉我在这里缺少什么吗?

string s = "\u0001";

在g ++中编译时出现错误:

error: \u0001 is not a valid universal character

4 个答案:

答案 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";