获取Unicode字符C++的十进制值
Get decimal value of Unicode Character C++
如何获取Unicode字符的十进制值,如"Ồ">
std::string a = "Ồ";
unsigned char c = a[0];
long val = long(c);
cout << val << endl;
输出
7,891;
您的问题看起来可能很直接,但当我们深入研究时,我们会发现它并不像最初看起来那么简单。
第一个问题是CCD_ 1被定义为CCD_;Ồ&";。因此,你从代码中得到的结果可能取决于你使用的编译器和/或你运行的环境和操作系统;Ồ"作为无效的ASCII字符,并将"(或0x3F(。
第二个问题是;Ồ"大于8位宽,因此它可能不适合变量c
。无论编译器在a[0]
中放入什么,变量c
都将只保存该值的char
位。同样,你得到的结果可能会根据你使用的编译器和/或你运行的环境而改变
抛开这一点不谈,让我们从假设字符";Ồ"为拉丁文大写字母O,带圆形和砾石(0x1ED2(。有了这个假设,人们可能会想象我们想要得到的答案是0x1ED2,对吧?但不一定。
有几种方法可以对Unicode字符进行编码。UTF-32编码是0x1ED2(或者0x00001ED2,如果我们包括所有前导零以获得32位(。UTF-8编码为0xE1BB92。
因此,";Ồ"如果是用UTF-32编码的,则为7890;如果是用UTF-8编码的,为14793618(为了简化起见,我忽略了字节序的影响(
Unicode网站有一个关于编码的常见问题解答,维基百科也有一个页面。
正如您所看到的,问题的答案(在某种程度上(取决于您想要使用的编码。处理编码的一种C++方法是std::codecvt。另一种解决方案是将字符串视为一个字节序列(您的代码试图这样做(,但这取决于您知道系统如何对字符串进行编码,处理的字节序是什么等等。而且代码不一定是可移植的。
另一个需要考虑的问题是,在一般情况下;Ồ"可能不是一个字符。很明显,它是代码中的一个字符。但如果你从磁盘文件中读取一个字符串,比如说,当打印或显示该文件时;Ồ"我们不能假设该文件包含单个";Ồ"性格
Unicode将组合CIRCUMFLEX ACCENT(0x0302(和组合GRAVE ACCENT(0x00300(定义为可以与其他字符组合的单独字符。它定义了中间字符,如拉丁大写字母O WITH GRAVE和拉丁大写字母奥WITH ACUTE,所以实际上有几种方法可以在内存(或磁盘文件(中创建字符串,这将给你带来与字符"相同的效果;Ồ&";。
- visual在c++中将十进制数转换为二进制数
- C++十进制到二进制,如何转换
- 计算十进制 c++ 之后的数字
- C++从二进制转换为十进制数
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- cin 的十进制输入验证?
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 将分数转换为十进制数并对其进行排序
- uint8_t同一二进制文件的不同十进制值
- 如何打印大于"无符号长长"的"std::bitset"的十进制值?
- 调用方如何知道 VARIANT 中何时有十进制?
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 十进制到二进制转换器 c++
- 使用标准库计算字符串中的十进制数
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 如何计算整数的十进制数字?
- (第 1 位 + 第 2 位)以十进制数表示
- 在 C++ 中使用带有十六进制十进制和八进制数的 unsetf