`
qimo601
  • 浏览: 3438492 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

从char到QChar

阅读更多



     char类型是c/c++中内置的类型,描述了1个字节的内存信息的解析。比如:

     char gemfield=’g’;

     那么在由gemfield标记的这块内存的大小就是1个字节,信息就是01100111,8位。


      再比如:

      char gemfield=’汉’;

      那么由gemfield标记的这块内存的大小依然是1个字节,存储的信息是:0xBA,这是因为在windows系统中,汉字是以gbk编码(ANSI)存储的,“汉”这个字的编码是0xBABA,因为char只有1个字节,所以就把低字节存储过来。


      经过gemfield上面的介绍后,你已经理解了char这个内置类型的用法,也就理解了下面语句的输出了:

      char gemfield=0×40;

      printf(“gemfield’s value is %c”,gemfield);


      现在我们来看看QChar,QChar是Qt处理字符的基本类型,是对unicode字符的封装。QChar使用2个字节的内存,在其内部维护了一个unsigned short 类型的内存(大多数的编译工具也会把它当作unsigned short类型)。使用的是ucs-2标准。

      首先,QChar封装一个char类型是相当容易理解的,char类型作为QChar的构造参数时,会被转换为unsigned short,继而可被QChar接管。

      其次,QChar封装一个unsigned short类型也是容易理解的,比如:

      QChar gemfield=0x6C49;

      0x6C49是“汉”字的unicode编码,这样,依据Qt内部使用的unicode表和codec插件,        gemfield就可以被成功解析为“汉”这个字。

       最后,下面这种情况是QChar不能处理的:

       QChar gemfield = ‘汉’;

       因为在windows上,“汉”的编码是gbk编码,值为0xBABA,正如gemfield上文提到的那样。这样,由QChar维护的unsigned short内存上的信息是0xBABA,这个值并不是unicode编码(unicode编码值是gemfield上文中提到的0x6C49),所以解析不了。

       同理,QChar可以通过unicode()函数返回一个字符的unicode编码。

       QChar提供了丰富的函数,来实现一些字符的转换操作和字符的判断操作,关于这些方面的疑问,请参考Qt的文档,或者去http://civilnet.cn/qt上提问。

分享到:
评论

相关推荐

    QString和char以及string之间的赋值详解

    - 当涉及到多字节字符集(如UTF-8)时,`char*`和`std::string`可能无法正确处理非ASCII字符,而`QString`则支持Unicode。 - 忘记处理`char*`的结束符`'\0'`可能导致内存溢出或未定义的行为。 - 在进行字符串拼接...

    Qt中QString转换成const char * ()、QByteArray等方法

    在Qt框架中,字符串处理是常见的任务,尤其是涉及到串口通信时,可能需要在QString与原始C风格的char *或QByteArray之间进行转换。QString是一个非常重要的类,它提供了Unicode字符串的支持,允许处理多种语言和字符...

    Qt常用类介绍

    - `QChar(unsigned char ch)`:由无符号字符数据`ch`构造。 - `QChar(unsigned short code)`:由无符号短整形数据`code`构造,其中`code`是Unicode编码。 - `QChar(short code)`:由短整形数据`code`构造,其中`...

    Qt常用类

    `:将`QChar`对象复制到`QString`中。 此外,还有多种其他方法可以用来拼接字符串: - `QString& append(const QString &other);`:在当前字符串末尾添加另一个`QString`。 - `QString& append(const char *str);`...

    QT常用类、方法

    #### QChar类 `QChar`是QT库中的一个基本类,用于处理单个字符。该类提供了丰富的成员函数来帮助开发者进行字符的判断与转换。 - **判断方法:** - `bool isDigit() const;`:判断当前字符是否为数字(0-9)。 -...

    pool qcharle方面的编写的代码的技术的文件

    从压缩包子文件的文件名称列表来看,尽管文件名看似与编程无关,但我们可以尝试找出潜在的关联。"穷查理宝典"系列文件可能是指投资大师查理·芒格的思想和智慧,这在编程中可能并不直接相关,除非"qcharle"项目或...

    qt_uart.rar_QT串口ascii_Qt 串口_qt uart 读写_qt 串口 助手_qt中UART怎么用

    QChar asciiChar(receivedByte); // 在界面上显示asciiChar ``` 16进制显示: ```cpp quint8 hexByte = serialPort.read().toUInt(&ok, 16); // ok为true表示转换成功,然后可以在界面上显示hexByte的值 ``` 对于...

    Qt下串口控制微型热敏打印机(嵌入式打印机)

    当涉及到QString到char*的转换时,可能会出现乱码问题。这是因为QString是Qt中的Unicode字符串,而char*通常用于表示ASCII或本地编码的字符串。转换时应确保正确的编码处理。可以使用QTextCodec类进行转换,例如: ...

    C++实现的软键盘

    textEdit->insertPlainText(QChar(character)); } } } ``` 最后,记得在main函数中创建并显示这个键盘窗口: ```cpp int main(int argc, char *argv[]) { QApplication app(argc, argv); KeyboardWindow ...

    QT调用Freetype查找ttf字库中是否存在某个汉字

    QChar hanzi = '汉字'; // 假设你要查找的汉字是'汉字' QString unicodeStr = hanzi.toUtf8().constData(); std::string utf8Str = unicodeStr.toStdString(); ``` 接下来,初始化Freetype库,并打开TTF字体文件: ...

    精心整理的qt主要类,常用类讲解

    如果需要读取原始数据,可以使用 readRawData() 读取数据到预先定义好的 char * 缓冲区,写原始数据使用 writeData(),读写原始数据需要对数据进行编码和解码。 四、QFileInfo 类 QFileInfo 类提供了获取文件信息...

    C++ QT实现串口调试助手【嵌入式QT GUI设计】.zip

    ui->receiveTextEdit->append(QString("%1").arg(byte, 2, 16, QChar('0'))); } } ``` 在上述代码中,我们连接了发送按钮的点击事件到`sendData`槽函数,当按钮被按下时,发送文本框的内容到串口。同时,我们监听...

    Qt初学者学习文档,讲述了基础用法和常用控件

    QChar ch1, ch2, ch3; in >> ch1 >> ch2 >> ch3; data.close(); } ``` #### 二、二进制数据处理 - **1.2.1 数据字节大小** - `char`: 1字节 - `int`: 4字节 - `float`: 4字节 - `double`: 8字节 - **1.2.2...

    qt5简单倒数 timer

    countdownLabel->setText(QString("%1:%2").arg(minutes, 2, 10, QChar('0')).arg(seconds, 2, 10, QChar('0'))); // 减少剩余秒数 --secondsRemaining; } ``` 最后,我们创建主窗口并显示`CountdownWidget`: ...

    输入框内容自动转换为大写字母

    - **JavaScript**: 在前端,我们可以使用JavaScript来监听输入框的`input`事件,一旦检测到输入,就通过`toUpperCase()`函数将文本转换为大写。例如: ```javascript const inputBox = document.getElementById('...

Global site tag (gtag.js) - Google Analytics