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)
由于您已经拥有十六进制的值,因此非常简单:
std::string s = "\x01";
Run Code Online (Sandbox Code Playgroud)
这适用于任何十六进制char文字。一般格式为\x<hex number>。
您得到的错误是由于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(包括两者)或基本源字符集中的字符,程序格式错误.
| 归档时间: |
|
| 查看次数: |
5987 次 |
| 最近记录: |