如何在 C++ 中存储 CTRL-A (0x01)细绳?

发布于 2024-12-13 06:59:44 字数 233 浏览 0 评论 0原文

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

string s = "\u0001";

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

error: \u0001 is not a valid universal character

I want to store CTRL-A (0x01) in a C++ string. Tried the following, but it does not work. Could you tell what I am missing here?

string s = "\u0001";

I get the error when compiled in g++:

error: \u0001 is not a valid universal character

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

药祭#氼 2024-12-20 06:59:44

您收到的错误是由于 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 或
字符串文字
对应于控制字符(在任一
范围 0x00–0x1F 或 0x7F–0x9F,两者均包括在内)或中的字符
基本源字符集,程序格式错误。

The error you get is due to 2.2/2 in C++03:

If the hexadecimal value for a universal character name is less than
0x20
or in the range 0x7F-0x9F (inclusive), or if the universal
character name designates a character in the basic source character
set, then the program is ill-formed.

So, for a string literal you have to use \x1 or \1 instead (and you can add leading zeroes to taste). Alternatively if you do only want one character in your string:

string s;
s.push_back(1);

or:

string s(1,1);

The restriction is relaxed in C++11 (2.3/2):

if the hexadecimal value for a universal-character-name outside the
c-char-sequence, s-char-sequence, or r-char-sequence of a character or
string literal
corresponds to a control character (in either of the
ranges 0x00–0x1F or 0x7F–0x9F, both inclusive) or to a character in
the basic source character set, the program is ill-formed.

執念 2024-12-20 06:59:44

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

std::string s = "\x01";

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

Since you already have your value in hexadecimal it's very simple:

std::string s = "\x01";

This works for any hexadecimal char literal. The general format is \x<hex number>.

素食主义者 2024-12-20 06:59:44

您可以使用

std::string s = "\001";

注意代码是八进制的。

You can use

std::string s = "\001";

Note that the code is octal.

江湖彼岸 2024-12-20 06:59:44

string 存储 ASCII 字符;编译器需要将输入字符集转换为 ASCII。此映射是实现定义的;看来您的编译器供应商已决定不从 U+0001 映射到 ASCII 0x01。

您应该能够使用以下命令初始化字符串

string s = "\001";

A string stores ASCII characters; the compiler needs to translate from the input character set to ASCII. This mapping is implementation defined; it appears your compiler vendor has decided not to map from U+0001 to ASCII 0x01.

You should be able to initialize the string using

string s = "\001";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文