qt怎样将字符串转化为16进制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt怎样将字符串转化为16进制相关的知识,希望对你有一定的参考价值。
参考技术Achar 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);
QByteArray QString2Hex(QString str)
QByteArray senddata;
int hexdata,lowhexdata;
int hexdatalen = 0;
int len = str.length();
senddata.resize(len/2);
char lstr,hstr;
for(int i=0; i<len; )
hstr=str[i].toLatin1();
if(hstr == ' ')
i++;
continue;
i++;
if(i >= len)
break;
lstr = str[i].toLatin1();
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;
返回的QBtyeArray 可直接用串口对像发送
参考技术B QString str = "123";QByteArray ba;
qDebug()<<ba.appand(str).toHex()<<endl;
Java 将字节转化为16进制字符串
很多时候我们需要将字节数组转化为16进制字符串来保存,例如做I/O字节流操作的时候,尤其在很多加密的场景中应用都比较广泛。
Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte 转换到16进制字符串的结果new String(H) + new String(L)。即byte用十六进制表示只占2位。
从上面可以看出来我们只需要分别取出高四位和低四位的二进制值,然后进行相应的换算。
具体方案如下:
/** * 0x0F 十六进制F 相当于值 十进制 15,二进制表现形式为 0000 1111 二进制 1 & 任何数是原数 二进制 0 & 任何数是0 * * @param b * @return */ public static String byteToHexString(Byte b) { final String HEX = "0123456789abcdef"; StringBuilder sb = new StringBuilder(); /** * 为什么要与0xof运算 因为0xof的二进制是0000 1111,同时1&运算得出原数,0&运算得出0 */ // 1.取出字节b的高四位的数值并追加 // 把高四位向右移四位,与 0x0f运算得出高四位的数值 sb.append(HEX.charAt((b >> 4) & 0x0f)); // 2.取出低四位的值并追加 // 直接与 0x0f运算得出低四位的数值 sb.append(HEX.charAt(b & 0x0f)); return sb.toString(); }
总结如下:
(1)一个byte 对应两位十六进制位,而不是八位(32位二进制位);
(2)转化为十六进制之后,不足两位的,高位要补零。
本文出自 “王威” 博客,请务必保留此出处http://jaydenwang.blog.51cto.com/6033165/1746161
以上是关于qt怎样将字符串转化为16进制的主要内容,如果未能解决你的问题,请参考以下文章
用C语言将16进制数转化为10进制数 16进制数以字符串形式输入 最好运用数组 谢谢