一、什么是Hex
将每一个字节表示的十六进制表示的内容,用字符串来显示。
二、作用
将不可见的,复杂的字节数组数据,转换为可显示的字符串数据
类似于Base64编码算法
区别:Base64将三个字节转换为四个字符,Hex将三个字节转换为六个字节
三、应用场景
在XML,JSON等文本中包含不可见数据(二进制数据)时使用
四、相关实现
QByteArray QByteArray::toHex(char separator) const
{
if (!d->size)
return QByteArray();
//一个字节会形成两个字符,最终长度是原始数据的2倍
const int length = separator ? (d->size * 3 - 1) : (d->size * 2);
QByteArray hex(length, Qt::Uninitialized);
char *hexData = hex.data();
const uchar *data = (const uchar *)d->data();
for (int i = 0, o = 0; i < d->size; ++i) {
//分别获取高四位,低四位的内容,将两个数值,转为字符
hexData[o++] = QtMiscUtils::toHexLower(data[i] >> 4);
hexData[o++] = QtMiscUtils::toHexLower(data[i] & 0xf);
if ((separator) && (o < length))
hexData[o++] = separator;
}
return hex;
}
//numbers 0-9 and the letters a-f.
Q_DECL_CONSTEXPR inline char toHexLower(uint value) Q_DECL_NOTHROW
{
return "0123456789abcdef"[value & 0xF];
}