std::string 中的 0xc2 字符

问题描述 投票:0回答:1

以下字符串的大小为 4,而不是我预期的 3。

std::string s = "\r\n½"; 
int ss = s.size(); //ss is 4

当逐个字符循环遍历字符串并将其转义为十六进制时,我得到

  • 0x0D(回车十六进制代码)
  • 0x0A(换行的十六进制代码)
  • 0xc2(十六进制代码,但这是什么?)
  • 0xbd(½ 字符的十六进制代码)

0xc2从哪里来? 它是某种编码信息吗?我虽然 std::string 在字符串中的每个可见字符都有一个字符。有人可以确认 0xc2 是“字符集修饰符”吗?

c++ char stdstring
1个回答
12
投票

“½”在 unicode 中具有代码点

U+00BD
,并由 UTF-8 通过两个字节序列
0xc2bd
表示。这意味着,您的字符串仅包含三个字符,但长度为四个字节。

std::string::size
不知道字符串内容编码,并返回字节数。

参见https://www.fileformat.info/info/unicode/char/00bd/index.htm

关于 SO 的附加阅读:std::wstring VS std::string.

© www.soinside.com 2019 - 2024. All rights reserved.