【问题标题】:How to convert accentuated char into number (int) cpp?如何将重音字符转换为数字(int)cpp?
【发布时间】:2017-09-21 16:39:40
【问题描述】:

所以我正在尝试将 é à â 转换为 int

#include <iostream>

using namespace std;

int main()
{
    string  a =  "é";
    unsigned long b = (unsigned long) a[0];
    cout << (string) b << endl;
    /* error: no matching conversion for C-style cast from 'unsigned 
       long' to 'string' (aka 'basic_string<char, char_traits<char>, 
       allocator<char> >') 
    */
    cout << b << endl;
    return 0;
}

我已经用 (char) 等做了... 所以我在这里,我认为这是编码问题,希望您能提供帮助。

【问题讨论】:

  • s/std::cout &lt;&lt; (char) - 61 &lt;&lt; endl;/std::cout &lt;&lt; (unsigned char) - 61 &lt;&lt; endl;
  • 你应该看看编码是如何工作的,例如在维基百科中。
  • 阅读utf8everywhere.org;找到一个好的 Unicode/UTF-8 库,例如gnu.org/software/libunistring;详细信息可能是特定于计算机和操作系统的

标签: c++ encoding typeconverter


【解决方案1】:

您有 两个 编码问题需要处理:

  • 编译器如何将源代码转换为对象数据
  • 如何将对象数据转换为数字

在我的完美世界中,我的源代码是 UTF-8,我的编译器会生成一个 UTF-8 字符串(而不是 Windows 编码之一)。这是第 1 步。

第二步:将 UTF-8 编码的字符串转换为 Unicode 码位。

如果您希望它采用其他特定编码,则必须确保 1) 您的编译器以某种(您知道的)方式对该字符串进行编码,并且 2) 您可以将其解码为数字表示。

如果您使用 UTF-8,则必须解码两个字节才能获得您的号码。如果您使用 UTF-16 或 UTF-32,您将在单个代码点中获得它。如果你使用像 CP-1252 这样的东西,你也会得到一个字节,但它不会像在 Unicode 中那样具有相同的数值。

弄清楚这些东西,转换就很容易了。

【讨论】:

    猜你喜欢
    • 2012-11-16
    • 2015-06-02
    • 2015-11-12
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2015-06-18
    相关资源
    最近更新 更多