我目前正在使用C++编写一个处理字母和韩文字符的程序。
然而,我了解到在C++中char
的大小只有1个字节。这意味着为了处理外语字符或UNICODE,需要使用两个chars表示一个字符。
string s = string("a가b나c다");
cout<< s.length();
打印输出9
但我的问题是c ++执行如何区分两种不同类型的字符?
例如,如果我创建一个大小为9的char数组,它怎么知道是9个ASCII字符还是4个Unicode加1个ASCII?
后来我发现:
char c;
int a;
char* cp = "가나다라마바사아";
for (int i = 0; i < 20; i++) {
c = a = cp[i];
cout << "\n c val : " << c;
cout << "\n a val : " << a;
}
仅打印a的负数值。
c val :
a val : -80
c val :
a val : -95
c val :
a val : -77
c val :
a val : -86
c val :
a val : -76
c val :
a val : -39
我可以推断出,对于非ASCII字符,它只使用负值?但这不是很浪费吗?
我的问题简而言之:C++是否仅通过查看字符是否为负数来区分ASCII字符和Unicode字符?
简而言之的答案:解析器通过查找字符的前几位来决定是否将1〜4个字符视为1个字形,因此在某种程度上,我的假设是正确的。