利用Qt的QSring,QByteArray
将16进制数的字符串转化为相对应的字符数组
例如 48 65 6c 6C 6f 20 57 6f 72 6c 64 21 转化为 Hello World!
转化过程大致为:
1、将相应的的16进制数转化为ASCII值(16进制数的48 对应 ASCII值的 72、16进制数的6c 对应 ASCII值的 99);
2、再将对应的ASCII值转化为字符(ASCII值的 72 对应 H、ASCII值的 99 对应 o);
3、将转化后的字符保存到返回的字符串中;
*****************************************************************
* 函 数 名 : ConvertHexChar
* 功能说明 : 将十六进制字符数转为十进制数:A-10、B-11、...
* 形 参 :
* 返 回 值 :
*****************************************************************
static
char
ConvertHexChar(
char
ch)
if
((ch >=
'0'
) && (ch <=
'9'
))
return
ch-
0x30
;
else
if
((ch >=
'A'
) && (ch <=
'F'
))
return
ch-
'A'
+
10
;
else
if
((ch >=
'a'
) && (ch <=
'f'
))
return
ch-
'a'
+
10
;
else
return
(-
1
);
*********************************************************
* 函 数 名 : HexStrToByteArray
* 功能说明 : 16进制字符串转字节数组
* 形 参 :
* 返 回 值 :
*********************************************************
static
QByteArray HexStrToByteArray(QString
str
)
QByteArray senddata;
char
lstr,
hstr;
int
hexdata,
lowhexdata;
int
hexdatalen =
0
;
int
len =
str
.length();
senddata.resize(len/
2
);
for
(
int
i=
0
; i<len; )
hstr=
str
[i].toLatin1();
if
(hstr ==
' '
)
continue
;
i++;
if
(i >= len)
break
;
lstr =
str
[i].toLatin1();
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
if
((hexdata ==
16
) || (lowhexdata ==
16
))
break
;
hexdata = hexdata*
16
+lowhexdata;
senddata[hexdatalen] = (
char
)hexdata;
hexdatalen++;
senddata.resize(hexdatalen);
return
senddata;
*********************************************************
* 函 数 名 : ByteArrayToHexStr
* 功能说明 : 字节数组转16进制字符串
* 形 参 :
* 返 回 值 :
*********************************************************
static
QString ByteArrayToHexStr(QByteArray data)
QString temp=
""
;
QString hex=data.toHex();
for
(
int
i=
0
;i<hex.length();i=i+
2
)
temp+=hex.mid(i,
2
)+
" "
;
return
temp.trimmed().toUpper();
*********************************************************
* 函 数 名 : MainWindow
* 功能说明 : 主函数
* 形 参 :
* 返 回 值 :
*********************************************************
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(
new
Ui::MainWindow)
ui->setupUi(
this
);
QString hex_data =
"48 65 6c 6C 6f 20 57 6f 72 6c 64 21"
;
QByteArray outData;
outData=HexStrToByteArray(hex_data);
qDebug()<<
"outData.size ="
<<outData.size() <<
"s_str = "
<< outData.data();
hex_data = ByteArrayToHexStr(outData);
qDebug()<<
"hex_data.size ="
<<hex_data.size() <<
"s_str = "
<< hex_data;
//运行结果为
outData.size = 12 s_str = Hello World!
hex_data.size = 35 s_str = “48 65 6C 6C 6F 20 57 6F 72 6C 64 21”
其他转化仅供参考:
static int StrHexToDecimal(QString strHex)
bool ok;
return strHex.toInt(&ok,16);
static int StrDecimalToDecimal(QString strDecimal)
bool ok;
return strDecimal.toInt(&ok,10);
static int StrBinToDecimal(QString strBin)
bool ok;
return strBin.toInt(&ok,2);
static QString StrHexToStrBin(QString strHex)
uchar decimal=StrHexToDecimal(strHex);
QString bin=QString::number(decimal,2);
uchar len=bin.length();
if (len<8)
for (int i=0;i<8-len;i++)
bin="0"+bin;
return bin;
static QString DecimalToStrBin1(int decimal)
QString bin=QString::number(decimal,2);
uchar len=bin.length();
if (len<=8)
for (int i=0;i<8-len;i++)
bin="0"+bin;
return bin;
static QString DecimalToStrBin2(int decimal)
QString bin=QString::number(decimal,2);
uchar len=bin.length();
if (len<=16)
for (int i=0;i<16-len;i++)
bin="0"+bin;
return bin;
static uchar GetCheckCode(uchar data[],uchar len)
uchar temp=0;
for (uchar i=0;i<len;i++)
temp+=data[i];
return temp%256;
static uchar GetUChar(char data)
uchar temp;
if (data>127)
temp=data+256;
temp=data;
return temp;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
int max = (1<<31)-1;
QString hex_data ="7fffffff";
int ten_int = StrHexToDecimal(hex_data);
qDebug()<<"ten_int ="<<ten_int;
int ten_ten = StrDecimalToDecimal(QString::number(max,10));
qDebug()<<"ten_ten ="<<ten_ten;
int bin_ten = StrBinToDecimal("1111111111111111111111111111111");
qDebug()<<"bin_ten ="<<bin_ten;
QString hex_bin = StrHexToStrBin(hex_data);
qDebug()<<"hex_bin ="<<hex_bin;
QString dec_bin = DecimalToStrBin1(max);
qDebug()<<"dec_bin ="<<dec_bin;
QString dec_bin2 = DecimalToStrBin2(max);
qDebug()<<"dec_bin2 ="<<dec_bin2;
uchar data[2]={123,321};
uchar tmp = GetCheckCode(data,2);
qDebug()<<"tmp1 ="<<tmp;
tmp = GetUChar(48);
qDebug()<<"tmp3 ="<<tmp;
tmp = GetUChar(255);
qDebug()<<"tmp4 ="<<tmp;
tmp = GetUChar(-1);
qDebug()<<"tmp5 ="<<tmp;
tmp = GetUChar(-127);
qDebug()<<"tmp6 ="<<tmp;
tmp = GetUChar(-256);
qDebug()<<"tmp7 ="<<tmp;
tmp = GetUChar(-255);
qDebug()<<"tmp8 ="<<tmp;
tmp = GetUChar(-300);
qDebug()<<"tmp9 ="<<tmp;
tmp = GetUChar(-257);
qDebug()<<"tmp10 ="<<tmp;
运行结果:
ten_int = 2147483647
ten_ten = 2147483647
bin_ten = 2147483647
hex_bin = “11111111”
dec_bin = “1111111111111111111111111111111”
dec_bin2 = “1111111111111111111111111111111”
tmp1 = 188
tmp3 = 48
tmp4 = 255
tmp5 = 255
tmp6 = 129
tmp7 = 0
tmp8 = 1
tmp9 = 212
tmp10 = 255