QT QString与Char* 之间的16进制互相转换方法


前言

使用Qt和硬件通信的时候总需要将QString转为char数组,而且是十六进制的,在网上看了一些例子都不是太靠谱,就自己实现一下。


一、QString 转 char*

1.1 一般情况

void MainWindow::QString2Hex(QString src,char* charresult)
{
    bool ok;
    uint Bytesize = src.size()/2;
    for (int j =0;j<Bytesize;++j )
    {
        QString hexstring = ("0X"+src.mid(j*2,2));
        charresult[j] = hexstring.toUInt(&ok,16);
    }
}

主要是将QString字符转如123456 就可以转为 0x12 0x34 0x56,也就是是啥就转换为啥。

1.2 含有中文时候

上述代码在转换的时候如果是从QString->char->QString则加一层

Qstring  str;
char*  ch;
QByteArray ba = str.toLatin1();    
ch=ba.data();

QByteArray这个作为QString与Char之间的中间桥梁很有用,在读取.bin文件的时候可以通过file->readALL转为qbitearray。
含有中文的时候可以有如下两种做法:

QByteArray ba = str.toUtf8();   
或者 
std::string str = str.toStdString();
const char* ch = str.c_str();

二、 char* 转 QString

代码如下(示例):

void MainWindow::char2QString(char *charresult, QString &src,uint length)
{
    for (int i =0 ;i<length ;i++ ) {
        src.append(QString::number(uint(charresult[i]),16));
    }
}

这里 char数组转为QString的时候需要 给个char数组长度,因为使用strlen()如果char数组中包含0x00,则会退出,导致长度不对,转换就有问题。
上述代码则会 char tmp[2] = {0x36,0x37}, 输出的QString字符为 36,37
如果使用如下代码

char ch_data[512];
QString str_data;
str_data = QString::fromLocal8Bit(ch_data,512);

上述代码则会 char tmp[2] = {0x36,0x37}, 输出的字符为 6,7 输出的是acii值。

总结

凡是多总结,欢迎大家给予评论!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的挖掘机

谢谢大家的厚爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值