2015-01-25 3 views
2

Я могу преобразовать BCD в десятичный, например, я могу преобразовать 0x11 в 11 вместо 17 в десятичном формате. Это код, который я использовал.Как преобразовать десятичную обратную BCD?

unsigned char hex = 0x11; 
unsigned char backtohex ; 

int dec = ((hex & 0xF0) >> 4) * 10 + (hex & 0x0F); 

Теперь я хочу, чтобы преобразовать dec обратно представления BCD. Я хочу, чтобы 11 был преобразован обратно в 0x11, а не 0x0B. Я немного растерялся, как вернуться.

Спасибо!

+2

Вы не можете использовать манипуляции с битами, но деление и операторы по модулю в цикле. –

+1

Ваша функция hex-dec имеет недостатки; например, 0x0A и 0x10 оба преобразуются в 10. Таким образом, нет возможности «вернуться». Возможно, вы вообще не имеете в виду шестнадцатеричный, просто BCD. –

+0

Я имею в виду только BCD, обновил вопрос. – Ammar

ответ

4

Предположим, что ваш вклад всегда находится между 0 и 99, включительно:

unsigned char hex = ((dec/10) << 4) | (dec % 10); 

Просто возьмите верхнюю цифру и сдвинуть его влево на один кусочкам, и или нижняя цифра на месте.

+0

Да, они между 0 и 99 – Ammar

 Смежные вопросы

  • Нет связанных вопросов^_^