为什么字符数组接受C++中的非 ASCII 字符?
Why do character arrays accept non ASCII characters in C++?
所以,我希望能够在我的C++程序中使用中文字符,我需要使用某种类型来保存超出ASCII范围的此类字符。
但是,我尝试运行以下代码,它起作用了。
#include <iostream>
int main() {
char snet[4];
snet[0] = '你';
snet[1] = '爱';
snet[2] = '我';
std::cout << snet << std::endl;
int conv = static_cast<int>(snet[0]);
std::cout << conv << std::endl; // -96
}
这没有意义,因为 C++ 中的sizeof(char)
,因为 g++ 编译器的计算结果为 1,但中文字符不能用单个字节表示。
为什么这里的汉字被允许装在char
体中?
应该使用什么类型来容纳C++中的汉字或非 ASCII 字符?
当您使用 -Wall 标志编译代码时,您将看到如下警告:
警告:隐式常量转换中的溢出 [-Woverflow] snet[2] = '我';
警告:多字符字符常量 [-Wmultichar] snet1 = '爱';
调试模式下的可视C++会给出以下警告:
c:\users\you\temp.cpp(9): 警告 C4566:在当前代码页中无法表示由通用字符名称"\u4F60"表示的字符 (1252)
幕布下发生的事情是,您的两个字节汉字被隐式转换为字符。该转换溢出,因此当您在控制台中打印它时,您会看到负值或奇怪的内容。
为什么这里的汉字被允许以字符形式容纳?
你可以,但你不应该,就像你可以定义char c = 1000000;
应该使用什么类型来容纳C++中的汉字或非 ASCII 字符?
如果要存储中文字符并且可以使用 C++11,请使用 std::string 进行 UTF-8 编码(实时示例)。
std::string msg = u8"你爱我";
相关文章:
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- RE2 不匹配非 ASCII 字符
- 打印从 0 到 255 的所有 ASCII 字符
- C++ 电话号码字母拨号程序 - 语法错别字?还是非 ASCII 字符?
- 无符号字符打印其 ASCII 值
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- 在结构数据类型中更改每个字符的 ASCII 值
- Cin 和 getline 无法正确保存非 ascii 字符
- C++-将ASCII字符数组中可能的数值转换为字符的最简单方法
- 非ASCII字符的词典排序
- 将char类型指定给int以打印相应的ASCII字符
- 将非 ASCII 字符转换为英语对应字符C++
- 在 C++ 中从 8 位 ASCII 字符创建 7 位 ASCII 文本字符串
- C++ UTF-8 瑞典语字符读取为 ASCII
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 如何遍历所有 ASCII 字符?
- 读取字符 ASCII 值并将其记录到矢量
- 如何在C++中读取带有ifstream的替换字符?(ASCII 中的 SUB)