HEX в текст

DireSnake
DireSnake аватар
Offline
Зарегистрирован: 15.01.2013

уперся в необходимость перевода байта  в текст, но - дословно. т.е. если задается на входе байт с значением 4F, то на выходе нужно получить текстовую строку  "4F", и не 47 и не какой-нибудь знак, с кодом #4F. 

как это можно реализовать? важно: никак не использовать последовательный порт.

axill
Offline
Зарегистрирован: 05.09.2011
char buf[8];

sprintf(buf, "%X", my_hex);

 

ites
Offline
Зарегистрирован: 26.12.2013

DireSnake пишет:

уперся в необходимость перевода байта  в текст, но - дословно. т.е. если задается на входе байт с значением 4F, то на выходе нужно получить текстовую строку  "4F", и не 47 и не какой-нибудь знак, с кодом #4F. 

как это можно реализовать? важно: никак не использовать последовательный порт.

Разбить на половинки по 4 бита и каждую преобразовать в текстовый символ.

DireSnake
DireSnake аватар
Offline
Зарегистрирован: 15.01.2013
my_hex=buf[i];
Ablock=my_hex/16;
Bblock=Ablock * 16;
Bblock=my_hex-Bblock;

сделал чуть сложнее, но данные (4F) парсятся в Adblock (4) Bblock (15 - "F").  криво конечно, но удалось получить данные с USB-джойстика на LCD экран, минуя сериалпорт.

ites
Offline
Зарегистрирован: 26.12.2013
char nibble2hex(uint8_t n) {
	if (n < 10)
		return '0' + n;
	else
		return 'A' + n;
}
void byte2hex(uint8_t n, char *rstr) {
	rstr[1] = nibble2hex(n & 15);
	n >>= 4;
	rstr[0] = nibble2hex(n);
}

 

Вот вариант иллюстрирующий что я говорил.