я использую следующую функцию для преобразования значения в шестнадцатеричном формате ASCII, чтобы:Преобразовать номер Ascii в Hex в C
void hex_to_ascii(unsigned char* buf, unsigned char number)
{
int i;
sprintf( buf, "%03d", number);
printf("\nNumber in Ascii: ");
for(i=0; i< 3; i++)
printf("%#04x ", *(buf+i));
printf("\n");
return;
}
например, Если шестнадцатеричное значение равно 0xff
, функция генерирует 0x32 0x35 0x35
, который представляет собой представление Ascii 255
.
Теперь я хотел бы отменить операцию. Мне нужна функция, которая может быть передана три байта (массив из 3) для генерации шестнадцатеричного значения.
т.е. Переходит 0x32 0x35 0x34
и генерирует 0xFE.
Можете ли вы помочь мне с этим? Для встроенной системы значения не печатаются, они получены из буфера обмена сообщениями.
Большое спасибо.
EDIT:
Я написал это, и это, кажется, работает ..
unsigned char ascii_to_hex(unsigned char* buf)
{
unsigned char hundred, ten, unit, value;
hundred = (*buf-0x30)*100;
ten = (*(buf + 1)-0x30)*10;
unit = *(buf+2)-0x30;
value = (hundred + ten + unit);
printf("\nValue: %#04x \n", value);
return value;
}
Спасибо всем за ответы.
Вы можете проверить [Преобразовать в ASCII строки из шестнадцатеричной строки в C] (HTTP: // stackoverflow.com/questions/17672639/convert-to-ascii-string-from-hex-string-in-c?rq=1) и [этот вопрос SO] (http://stackoverflow.com/questions/6933039/convert -two-ascii-bytes-in-one-hexadecimal-byte? rq = 1) –
'number' не является« шестнадцатеричным значением », это« char », то есть целое число. Не имеет значения, вы называете 'hex_to_ascii (buffer, 0xFF)', 'hex_to_ascii (buffer, 255)' или 'hex_to_ascii (buffer, 0377)' - они все одинаковы. Обратная операция - 'scanf'. – molbdnilo