将一个uint8_t类型的值数组转换为它们在char类型数组中的十六进制等价物

3

char readBuf[] = "96 36 D4 D1 F8 C1 8A E0 BF 29 10 91 3C 4D F1 5D 08";

我希望将每一对数值转换为十六进制的值,从而在新的char[]中获得17个单独的十六进制值。

结果等同于在代码中编写以下内容:

char hexStr[] = {0x96,0x36,0xD4,0xD1,0xF8,0xC1,0x8A,0xE0,0xBF,0x29,0x10,0x91,0x3C,0x4D,0xF1,0x5D,0x08}

我不知道如何从readBuf构建一个新的十六进制值添加到新的char[]中。


你的结果对我来说没有意义。readBuf[1]是'6',在asciiStr中映射为0x36,但readBuf[4]也是'6',在asciiStr中映射为0xF8。我有什么遗漏吗? - nicomp
我已经更新了,希望能更清晰地表达,并删除了最后一条评论,因为它会让事情变得混乱! - Justyn
问题是什么? - too honest for this site
1个回答

1
像这样的内容:
char readBuf[] = "96 36 D4 D1 F8 C1 8A E0 BF 29 10 91 3C 4D F1 5D 08";
size_t length = strlen(readBuf);
// ideally the length of this should be computed from the string length and allocated dynamically
uint8_t result[17]; 
size_t pos = 0;
while(pos * 3 < length) {
    int value;
    int scanned = sscanf(readBuf + pos * 3, "%x", &value);
    if(scanned == 1) {
        result[pos] = value;
        pos ++;
    } else {
        fprintf(stderr, "Invalid hex number at %zu", pos * 3);
        break;
    }
}

谢谢Chris,这个更加紧凑,不需要使用十六进制转整数的方法。它还包括了无效十六进制数字的错误处理。因此,我已经更新了正确答案。如果有人认为这不应该是被接受的答案,请提出意见。 - Justyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接