0

我想获得乘号的 Latin1 代码×,但是当我检查它里面的值QChar-41'×'

我的代码:

QString data = "×";
QChar m = data.at(0);
unsigned short ascii = (unsigned short)m.toLatin1();

当我调试时,在第二行中我看到的QChar值为-41'×'.

我更改了代码:

unsigned int ascii = c.unicode();

但我得到的值是 215,我希望是 158。

4

2 回答 2

4

乘号×不是 ascii 符号,正如您在检查man ascii您是否在 unix 系统上时看到的那样。

它的值取决于编码,有关其 UTF 表示形式,请参见此处。例如,在 UTF-8 上,它的值0xC397是两个字节。正如我在 unicode 页面上提到的,我链接的 215 是用 UTF-16 编码表示这个字符的十进制值,这就是c.unicode()返回的值。我不知道你为什么期望 158。

但是有一个 ascii 乘号,即*.

于 2015-06-23T19:07:07.807 回答
1

如果您检查Latin1 代码表,很明显它× 确实被编码为 215 或 -41。Qt 给你正确的结果。

你的错误是:

  1. 假设 Latin1 等价于 ASCII。Latin1 仅包含 ASCII,但它是超集:它定义的代码比 ASCII 多 2 倍。

  2. 假设×以 ASCII 表示。它不是。

我不知道你从哪里得到 Latin1 编码×应该是 158 的想法。它肯定不是来自 Latin1 代码表!顺便提一下,Latin1 和 UTF-8 编码×是相同的。

于 2015-06-24T18:36:32.550 回答