我想在C ++中将ASCII字节数组转换为十六进制字节数组。 例如ASCII字符
Byte source[3] = {0xB1,0x8E,0x9C};
十六进制
Byte destination[6] = {0x42,0x31,0x38,0x45,0x39,0x43}
通过将ASCII字符映射到十六进制值
B = 42,1 = 31,8 = 38,E = 45,9 = 39,C = 43
答案 0 :(得分:1)
您可以使用一个简单的查找表来完成此操作:
#include <stdio.h>
typedef unsigned char Byte;
int main() {
char digits[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
Byte source[3] = { 0xB1,0x8E,0x9C };
Byte destination[6];
for (int i = 0; i < 3; ++i) {
destination[i * 2] = digits[source[i] >> 4]; // High nibble
destination[i * 2 + 1] = digits[source[i] & 0xF]; // Low nibble
}
for (int p = 0; p < 6; ++p) printf(" 0x%02X", destination[p]);
printf("\n");
return 0;
}
编辑:您可以使用以下代码使代码更简洁
const char *digits = "0123456789ABCDEF";
但是,正如SO上的许多人指出的那样,短代码并不总是最好的,也不是最清晰的。在这种情况下,编译器可能会生成几乎相同的机器代码。