将字节转换为两位十六进制数字

Converting bytes into two-digit, hexadecimal numbers

本文关键字:两位 十六进制数字 字节 转换      更新时间:2023-10-16
testRead = testRead.toHex();
std::vector<int> testHexSet;
for(int i = 1; i != testRead.length() + 1; i = i + 2) {
    int iValue = ((int)testRead[i-1] * 16) + (int)testRead[i];
    testHexSet.push_back(iValue);
}

上面的代码是我转换testRead(QByteArray,基本上是char[])的失败尝试,其内容如下所示:

f0f1f2

分成三个整数。当输入如上所示时,我得到的是:

{1680, 1681, 1682}

所以甚至没有接近(顺便说一句。"f"如何等于 105?我非常确定这是因为它将数字作为小数 - 如何告诉它这些实际上是十六进制?我可以将每对字符添加到单个字符串并使用 strtol 转换为整数,但这真的要走吗?

您的计算基于 ASCII 数字,即 102 表示"f",48 表示"0"。
在计算
之前从 0 到 9 之间的每个字符中减去"0"(=48)其余部分('a'-10)(小写)