将ASCII字节字符数组转换为十六进制字节数组

时间:2019-09-19 11:10:21

标签: c++ hex

我想在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

1 个答案:

答案 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上的许多人指出的那样,短代码并不总是最好的,也不是最清晰的。在这种情况下,编译器可能会生成几乎相同的机器代码。