将 uint8_t 值数组转换为 char 数组中的十六进制等价物
Convert a uint8_t array of values to their hex equivalents in a char array
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[]。
像这样:
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;
}
}
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[]。
像这样:
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;
}
}