Преобразование байтового массива ASCII в шестнадцатеричный байтовый массив - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу преобразовать байтовый массив ASCII в шестнадцатеричный байтовый массив в C ++.например, символы ASCII

Byte source[3] = {0xB1,0x8E,0x9C};

в шестнадцатеричные

Byte destination[6] = {0x42,0x31,0x38,0x45,0x39,0x43}

путем сопоставления символов ASCII со значениями Hex

B = 42, 1 = 31, 8 =38, E = 45, 9 = 39, C = 43

1 Ответ

1 голос
/ 19 сентября 2019

Вы можете сделать это с помощью простой справочной таблицы:

#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";

Но, как многие здесьна что уже указывалось, короткий код не всегда самый лучший или самый ясный.В этом случае компилятор, вероятно, сгенерирует практически такой же машинный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...