2015-01-25 4 views
2

BCD를 십진수로 변환 할 수 있습니다. 예를 들어 십진수로 17 대신 0x11을 11로 변환 할 수 있습니다. 이것은 내가 사용한 코드입니다.십진수를 다시 BCD로 변환하는 방법?

unsigned char hex = 0x11; 
unsigned char backtohex ; 

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

는 지금은 BCD 표현으로 다시 dec을 변환 할. 11이 0x0B가 아닌 0x11로 다시 변환되기를 원합니다. 나는 어떻게 돌아갈 지 혼란 스럽다.

감사합니다.

+2

루프에서 비트 조작, 나누기 및 모듈러스 연산자를 사용할 수 없습니다. –

+1

16 진수로 변환하는 함수에 결함이 있습니다. 예 : 0x0A와 0x10은 모두 10으로 변환됩니다. 따라서 "돌아갈 방법"이 없습니다. 어쩌면 16 진법을 전혀 의미하지 않을 수도 있습니다. 단지 BCD 일뿐입니다. –

+0

나는 단지 BCD를 의미하고, 질문을 업데이트했다. – Ammar

답변

4

입력을 가정하면, 0에서 99 사이에 항상 포함입니다 :

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

은 단순히 위 자리를 가지고 그것이 하나의 니블 왼쪽으로 이동하고, 장소에 또는 낮은 자리.

+0

예 0에서 99 사이입니다. – Ammar

관련 문제