当前位置: 代码迷 >> QT开发 >> 请问怎么把1个QString数字字符串转换成16进制的QString数字字符串
  详细解决方案

请问怎么把1个QString数字字符串转换成16进制的QString数字字符串

热度:23   发布时间:2016-04-25 03:55:41.0
请教如何把1个QString数字字符串转换成16进制的QString数字字符串
   刚开始工作接了公司一个项目,一个报文处理工具,需求是把报文附带着中文显示出来,所以想到用QString来实现,效果如下EB 90 EB 90 EB(报文头) 90 01 61
   
   报文是以char*存储的,所以我先完成从char*到QString的转换,代码如下
char* m_pData;
        memcpy(m_pData, pData, nLength); 
m_nLength = nLength;

//char存储到QString里
for (int i = 0; i < m_nLength; i++)
{
bool ok;
QString m_tmp = QString::number(*m_pData,16); 


//接收字符为0x00,变字符串为00
if (m_tmp.toInt(&ok,10) == 0)
{
m_tmp = ("00");
}
//接收字符为0x04,0x07等,补足0
if ((m_tmp.toInt(&ok,10) < 10) && (m_tmp.toInt(&ok,10) > 0))
{
m_tmp = m_tmp.insert(0, "0");
}

m_exchange.append(m_tmp);
m_exchange.append(" ");
m_pData = m_pData + 1;
m_tmp.clear();
}


当是全部是数字的时候转换都能成功,比如*m_pData是104,那么转换出来就是"68",也就是0x68,*m_pData为0,经过处理就是"00",不足10的补足,比如是4,那么就是"04",但是现在我的问题是,如果是16进制带字母的该如何转换呢,比如0xEB,希望转换成"EB",但是QString里没找到toHex函数。。。btw,我是Qt 4.8.0的版本,求问各位大牛有什么好办法么?

------解决方案--------------------
一个古老的函数

str.spritnf("%.2X",iByte);
------解决方案--------------------
sprintf(m_tmp, "%2X",(unsigned char)*m_pData)
------解决方案--------------------

char* m_pData;
        memcpy(m_pData, pData, nLength); 

你没有为m_pData分配资源就copy过去了?
既然都用c++了,为何不干脆使用std::string?
或者更直接一点,把文件存到QString里,省下转换地开销

QString有提供一个叫toInt地函数


QString data("104");
qDebug()<<data.toInt(nullptr, 16);


nullptr为c++11才提供地关键字
编译器不支援地话用0就好
不要用NULL,c++可没有规定NULL一定等于0

  相关解决方案