Вы можете сделать это с помощью простой справочной таблицы:
#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";
Но, как многие здесьна что уже указывалось, короткий код не всегда самый лучший или самый ясный.В этом случае компилятор, вероятно, сгенерирует практически такой же машинный код.