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