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

San*_*ish 4 c++ string escaping character-encoding

我想将CTRL-A(0x01)存储在C++字符串中.尝试以下,但它不起作用.你能说出我在这里失踪了吗?

string s = "\u0001";
Run Code Online (Sandbox Code Playgroud)

我用g ++编译时得到错误:

error: \u0001 is not a valid universal character
Run Code Online (Sandbox Code Playgroud)

orl*_*rlp 5

由于您已经拥有十六进制的值,因此非常简单:

std::string s = "\x01";
Run Code Online (Sandbox Code Playgroud)

这适用于任何十六进制char文字。一般格式为\x<hex number>


Ste*_*sop 5

您得到的错误是由于C++ 03中的2.2/2:

如果通用字符名称的十六进制值小于0x20或在0x7F-0x9F(包括)范围内,或者通用字符名称指定基本源字符集中的字符,则程序格式错误.

因此,对于字符串文字,您必须使用\x1\1替代(并且您可以添加前导零来品尝).或者,如果您只需要字符串中的一个字符:

string s;
s.push_back(1);
Run Code Online (Sandbox Code Playgroud)

要么:

string s(1,1);
Run Code Online (Sandbox Code Playgroud)

在C++ 11(2.3/2)中放宽了限制:

如果c-char-sequence,s-char-sequence或字符或字符串文字的r-char序列之外的通用字符名称的十六进制值对应于控制字符(在0x00范围内) 0x1F或0x7F-0x9F(包括两者)或基本源字符集中的字符,程序格式错误.