【问题标题】:Convert ASCII Byte Char array to Hex Byte Array将 ASCII 字节字符数组转换为十六进制字节数组
【发布时间】:2019-09-19 11:10:21
【问题描述】:

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

【问题讨论】:

  • 我不明白你要做什么。:)
  • 请在您的帖子中添加一个实际问题
  • 你试过自己做这个吗?
  • 使用 stringstream 和 std::hex
  • @stark - stringstream 有什么帮助? OP 想要 BYTE 数组中的值。

标签: c++ hex


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

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2019-02-12
    • 2022-01-09
    • 2022-01-09
    • 2016-05-05
    相关资源
    最近更新 更多