十六进制到BCD转换

时间:2014-11-30 12:18:47

标签: hex type-conversion decimal bcd

要将(213AFE)H转换为BCD,首先必须将其转换为二进制,并提供(2177790)D。现在每个数字都转换为BCD代码,给出(0010 0001 0111 0111 0111 1001 0000)BCD

另一种方法是将十六进制值转换为二进制值,得到(0010 0001 0011 1010 1111 1110)B,然后通过向每个大于9的数字加6来进行BCD调整,如下所示:

0010 0001 0011 1010 1111 1110
+              0110 0110 0110
-----------------------------
0010 0001 0100 0001 0110 0100 -> 35092368D

上述过程的最终结果是不同的。第二种方法错了吗?为什么呢?

4 个答案:

答案 0 :(得分:0)

Ascii_Hex:                          ;procedure to convert Ascii to Hex
	mov rax,0
	mov rcx,4
	mov rsi,hex
	mov rbx,0
   loop1:
   	rol bx,4
	   mov al,[rsi]
   	cmp al,'9'
	   jbe sub30h
	   sub al,7h
      sub30h:
	      sub al,30h
	      add bx,ax
	   inc rsi
	loop loop1
ret

HtB:                                ;procedure to convert HEX to BCD
   io 1,1,msg,msglen
	io 0,0,hex,5
	call Ascii_Hex                   ;call to procedure to convert ascii to hex
	mov rcx,5
	mov ax,bx                     
	mov bx,0Ah
   loop2:	
	   mov rdx,0
   	Div bx                        
	   push dx
	loop loop2
	
	mov rsi,hex
	mov rcx,5
   loop3:
	   pop dx
	   add dl,30h
	   mov[rsi],dl
	   inc rsi
	loop loop3	
	io	1,1,hex,5
	io 1,1,newline,1
ret

答案 1 :(得分:0)

我使用此代码以C语言从十六进制到BCD进行1字节转换 并且仅适用于0-99d。 如果需要2字节,则单词,过程类似。

例如,它将转换78d(0x4E)=> 0x78

uint8 convert2BCD(uint8 hexData)
{
    uint8    bcdHI=hexData/10;
    uint8    bcdLO=hexData%10;
    uint8    bcdData= (bcdHI<<4)+bcdLO;    

    return   bcdData;
  }

答案 2 :(得分:0)

这是一个将 uint32 转换为 BCD 并将其存储在数组中的 C 函数,因此分别以十进制格式。请注意,定义的 'len' 是十进制格式的数据类型的最大长度,因此 uint32 全值表示 4,294,967,295 组成 10 位。

#define len 10
void BCD(uint32_t value, uint8_t bcd[len])
{
    uint32_t factor;
    uint32_t decimal = len;
    uint32_t remains = value;    
    for(uint8_t i = 0; i < decimal; ++i)
    { 
        factor = 1;
        for (uint8_t j = 0; j < (decimal - i - 1); ++j) 
            factor *= 10;
        bcd[decimal - i - 1] = remains / factor;
        remains = remains % factor;
    }
    return;
}

答案 3 :(得分:-1)

第二种方法不是错误的,但它实际上是转换主要方法的一部分,即大于9的数字应该总是通过BCD调整方法调整(加6)你得到的答案是有效的BCD !