std::string 中的 0xc2 个字符
0xc2 character in std::string
以下字符串的大小为 4,而不是我预期的 3。
std::string s = "\r\n½";
int ss = s.size(); //ss is 4
当一个字符一个字符地循环遍历字符串并将其转义为十六进制时,我得到
- 0x0D(回车的十六进制代码 return)
- 0x0A(换行的十六进制代码)
- 0xc2(十六进制代码,但这是什么?)
- 0xbd(½ 字符的十六进制代码)
0xc2 从何而来?
它是某种编码信息吗?我虽然 std::string 在字符串中每个可见字符都有一个字符。有人可以确认 0xc2 是 "character set modifier" 吗?
"½" 在 unicode 中具有代码点 U+00BD
并由 UTF-8 表示为两个字节序列 0xc2bd
。这意味着,您的字符串仅包含三个字符,但长度为四个字节。
见https://www.fileformat.info/info/unicode/char/00bd/index.htm
关于 SO 的补充阅读:std::wstring VS std::string。
以下字符串的大小为 4,而不是我预期的 3。
std::string s = "\r\n½";
int ss = s.size(); //ss is 4
当一个字符一个字符地循环遍历字符串并将其转义为十六进制时,我得到
- 0x0D(回车的十六进制代码 return)
- 0x0A(换行的十六进制代码)
- 0xc2(十六进制代码,但这是什么?)
- 0xbd(½ 字符的十六进制代码)
0xc2 从何而来? 它是某种编码信息吗?我虽然 std::string 在字符串中每个可见字符都有一个字符。有人可以确认 0xc2 是 "character set modifier" 吗?
"½" 在 unicode 中具有代码点 U+00BD
并由 UTF-8 表示为两个字节序列 0xc2bd
。这意味着,您的字符串仅包含三个字符,但长度为四个字节。
见https://www.fileformat.info/info/unicode/char/00bd/index.htm
关于 SO 的补充阅读:std::wstring VS std::string。