1、字符串转成10进制
/*********************
*单个字符转换为hex
*'a'-> a
************/
int charConvertInt(char n)
{
int result= 0;
if(n >= '0' && n <= '9'){
result = n - '0';
}else if( n>= 'A' && n <= 'F'){
result = n - 'A' + 10;
}else if( n >= 'a' && n<= 'f'){
result = n - 'a' + 10;
}
return result;
}
/*********************
*字符串转换为hex
*'a'-> a
************/
QByteArray QStringcharConvertIntHex(QString hexStr)
{
QByteArray senddata;
int hexdata, lowhexdata;
int hexdatalen = 0;
int len = hexStr.length();
senddata.resize(len/2);
char lstr, hstr;
for(int i = 0; i < len; )
{
//将第一个不为' '的字符赋给hstr;
hstr = hexStr[i].toLatin1();
if(hstr == ' ')
{
i++;
continue;
}
i++;
//当i >= len时,跳出循环
if(i >= len)
break;
//当i < len时,将下一个字符赋值给lstr;
lstr = hexStr[i].toLatin1();
//将hstr和lstr转换为0-15的对应数值
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
//
if((hexdata == 16) || (lowhexdata == 16))
break;
else
hexdata = hexdata * 16 + lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
return senddata;
}
2、字符串转换成16进制
QByteArray charConvertHex( QString str)
{
QByteArray result;
QByteArray array = str.toLatin1();
if(array.isEmpty())
return result;
if(array.count() % 2 != 0){
array.append('0');
}
for(int i = 0; i < array.count(); i += 2){
char a = array.at(i);
char b = array.at(i + 1);
result.append((charConvertInt(a) << 4) | charConvertInt(b));
}
return result;
}
3、十进制转换为16进制字符
QString intConvertHex(int dec)
{
//保证数据在两帧范围内
if(dec > 65535)
{
QMessageBox::information(NULL, "警告", "输入超出规定范围(input < 65535)");
return "0";
}
QString hexStr;
int temp = dec / 16;
int left = dec % 16;
if(temp > 0)
hexStr += decInt2HexStr(temp);
if(left < 10)
hexStr += (left + '0');
else
hexStr += ('A' + left - 10);
return hexStr;
}
4、输出形式格式化
//将输入格式化,补满四位:0XFFFF
QString control::formatInput(QString hexStr)
{
int strlen = hexStr.length();
switch(strlen)
{
case 0:
hexStr = "0000";
break;
case 1:
hexStr = "000" + hexStr;
break;
case 2:
hexStr = "00" + hexStr;
break;
case 3:
hexStr = "0" + hexStr;
break;
case 4:
hexStr = hexStr;
break;
default:
break;
}
return hexStr;
}
5、qbytearray 转 Qstring
QByteArray cmd = {0x45, 0x56};
QString str = QString(cmd.toHex());
6、 Qstring 转 qbytearray
QString test1= "11111111100011101011011111";
qDebug() << QByteArray::number(test1.toInt(nullptr,2),16);//结果:"3fe3adf"
Qt 转变数字为字符串,16进制、8进制、2进制等等
把157转变成16进制、8进制、2进制的字符串
1: #include <QtCore/QCoreApplication>
2: #include <iostream>
3: using namespace std;
4:
5: int main()
6: {
7: cout << QString::number(157, 16).toStdString() << endl;
8: cout << QString::number(157, 8).toStdString() << endl;
9: cout << QString::number(157, 2).toStdString() << endl;
10:
11: return 0;
12: }
输出结果为:
9d
235
10011101
Press <RETURN> to close this window...
QByteArray instruct ;
QString str=(“fae50200010a5f”);
for(int i=0;i<14;i+=2){
char a = str.toLatin1().at(i);
char b = str.toLatin1().at(i+1);
instruct.append( charConvertInt (a) << 4 | charConvertInt (b));
}
_port->write(instruct);