Я работаю над микроконтроллером, который выводит число только в шестнадцатеричном представлении. У меня есть данные, которые рассчитываются в десятичном формате и предназначены для чтения и интерпретации человеком. Мой вывод - это три десятичных числа 45, 27 и 91, когда я вывожу их, я получаю 0x2D, 0x1B и 0x5B. Какую операцию я могу выполнить, чтобы преобразовать 45 в 0x45, 27 в 0x27 и так далее.
Преобразование десятичного значения в шестнадцатеричное с тем же видимым представлением
Ответы (2)
Если я вас правильно понял, вы хотите что-то вроде этого:
unsigned char convert(unsigned char in) {
return ((in % 10) * 0x01) + ((in / 10) * 0x10);
}
int main()
{
unsigned char a = 45;
printf ("0x%02X", convert(a)); // prints "0x45"
return 0;
}
Он преобразует десятичное значение 45
в 0x45
, что эквивалентно десятичному 69
. Обратите внимание, что функция преобразования на микроконтроллерах работает не очень быстро из-за деления /
.
Он может печатать только десятичные значения от 0 до 99, потому что можно использовать только две цифры.
person
izlin
schedule
20.06.2018
я немного запутался... почему все это вуду вместо
std::cout << "0x" << 45;
?
- person 463035818_is_not_a_number; 20.06.2018
@ user463035818 Если я правильно понял вопрос, ему нужно отправить значение через последовательный интерфейс. Вот почему OP попросил преобразовать 45 в 69, чтобы вы могли видеть 0x45 в последовательном потоке.
- person izlin; 20.06.2018
до сих пор не понял полностью, но звучит разумно
- person 463035818_is_not_a_number; 20.06.2018
Привет, спасибо, это именно то, что я искал! Извините, если я не правильно выразился
- person cdn; 20.06.2018
Хотя я думаю, что конвертировать 45 в 0x45 не очень хорошая идея, вот метод:
int dec = 45;
int hex = 0;
int i = 1;
while(dec/10 != 0){
int digit = dec%10;
hex += digit*i;
i *=16;
}
cout << hex << endl;// if you convert "hex" to hexadecimal, it would be 0x45
person
mostawk
schedule
20.06.2018
"0x"
спереди... подождите, вы имеете в виду вывод на дисплей? Какой тип данных вы ожидаете для результата? - person musefan   schedule 20.06.2018std::hex
) - person 463035818_is_not_a_number   schedule 20.06.2018