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

一、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值。

你可能感兴趣的:(qt,c++,开发语言)