QChar为乘法符号'×'存储负的Latin1代码

时间:2015-06-23 18:25:49

标签: qt qchar

我想获得乘法符号×的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.

2 个答案:

答案 0 :(得分:4)

乘号×不是ascii符号,如果您使用的是unix系统,可以在查看man ascii时看到。

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

虽然有一个ascii乘法符号,*

答案 1 :(得分:1)

如果您查看Latin1 code table,很明显× 确实编码为215或-41。 Qt正在给你正确的结果。

你的错误是:

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

  2. 假设×在ASCII中表示。事实并非如此。

  3. 我不知道你认为Latin1编码的×应该是158.肯定它不是来自Latin1代码表!顺便说一下,×的Latin1和UTF-8编码是相同的。