将一个uint8_t值的数组转换为char数组中的十六进制等值

时间:2015-12-17 15:08:10

标签: c arrays hex data-conversion

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 []。

1 个答案:

答案 0 :(得分: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;
    }
}