一、介绍
因为在平时工作中经常用到十六进制转成其他数据的情况,就写一个小工具用于平时数据转换,现在分享给大家,有不足之处请多指教。界面如下:
同时里面的函数也可以单独拿出来使用,程序进行转换时可以直接调用。
二、转换过程中注意的点
1、内存拷贝函数的使用
memcpy(&output, charlist, sizeof(output));
memcpy是内存拷贝函数,它可以实现指定内存大小的拷贝。
它有三个参数:
第一个参数类型是void*,用来接收目的地的首地址;
第二个参数类型是const void*,用来接收源头内容的首地址(拷贝时源头的内容不会被改变,用const修饰会更安全);
第三个参数类型是size_t(无符号整型),表示从源头地址开始向后需要拷贝的字节数。
详细的函数介绍可以参考:内存函数(memcpy、memmove、memset、memcmp)_qt memcpy-优快云博客
2、字符串转QByteArray
bool isOk = false;
QByteArray bytes;
for(int i=0; i<result.length(); i+=2)
{
QString subStr = result.mid(i,2);
int tempInt = subStr.toInt(&isOk,16);
isSuccess = isOk;
if(!isOk) break;
bytes.append(tempInt);
}
十六进制字符串转化成QByteArray,这个需要先转化成int类型,再放入QByteArray。如果是以字符串放入QByteArray,结果是错误的。
3、大小端的区分
简单的讲就是:
大端模式是高位在前低位在后,比如0x01FF,0x01就是高八位、0xFF就是低八位.
小端模式是低位在前高位在后,转化的时候是反着来的。
如果转为为quint16,那么大段模式 0x01FF = 511,小端模式 0x01FF = 65281
大小端模式详解参考: