ahui 发表于 2006-4-30 01:47:41

请教一个将十六进制转换成十进制的写法!!!

比如将十六进制的OCR1A转换成十进制!!小弟"磨齿难忘"!!!

fsclub 发表于 2006-4-30 08:32:43

除10取余得个位,结果再除10取余得10位....

直到商为0,只有余数.

ahui 发表于 2006-4-30 09:33:08

谢了大虾,原来我也这样写的不过写错了!!!

Jacky 发表于 2006-4-30 10:03:04

//========一个压缩的BCD码型CHAR转换为一个十六进制CHAR型=========

unsigned char CharBCDToCharHEX( unsigned char temp )

{

        unsigned char a;

        a = temp & 0x0f;

        a += ( temp >> 4 ) * 10;       

        return( a );

}





//=========一个十六进制的CHAR型转换为一个压缩的BCD码INT型========

unsigned int CharHEXToIntBCD( unsigned char temp )

{

        unsigned char a;

        unsigned int b;

        a =temp % 10;   

    temp = temp / 10;

    a += ( ( temp % 10 ) << 4 );           

    b = ( temp / 10 );

    b = ( b << 8 );

    b += a;

    return ( b );   

}





//=========一个压缩的BCD码Long型转换为一个十六进制的Long型==========

unsigned long LongBCDToLongHEX( unsigned long temp )

{

        unsigned long b;

        b =(   temp                                >> 28 ) * 10000000;

        b += ( ( temp & 0x0f000000 ) >> 24 ) * 1000000 ;

        b += ( ( temp & 0x00f00000 ) >> 20 ) * 100000;

        b += ( ( temp & 0x000f0000 ) >> 16 ) * 10000   ;

        b += ( ( temp & 0x0000f000 ) >> 12 ) * 1000    ;

        b += ( ( temp & 0x00000f00 ) >> 8) * 100   ;

        b += ( ( temp & 0x000000f0 ) >> 4) * 10      ;

        b += ( ( temp & 0x0000000f )       )         ;

        return( b );

}





//=========一个压缩的BCD码INT型转换为一个十六进制的INT型==========

unsigned int IntBCDToIntHEX( unsigned int temp )

{

        unsigned int b;

        b = ( temp >> 12) * 1000;

        b += ( ( temp & 0x0f00 ) >> 8 ) * 100;

        b += ( ( temp & 0x00f0 ) >> 4 ) * 10;

        b += ( temp & 0x000f );

        return( b );

}





//==========一个十六进制的INT型转换为一个压缩的BCD码INT型=========

unsigned int IntHEXToIntBCD( unsigned int temp )

{

    unsigned char a,b;

    unsigned int c;   

    a = temp % 10;

    a += ( ( ( temp / 10 ) % 10 ) << 4 );

    temp = temp / 100;

    b = temp % 10;

    b += ( ( ( temp / 10 ) % 10 ) << 4 );

    c = b;

    c = ( c << 8 );

    c += a;   

    return( c );

}





//==========一个十六进制的INT型转换为一个压缩的BCD码LONG型=========

unsigned long IntHEXToLongBCD( unsigned int temp )

{

    unsigned char a,b;

    unsigned long c;

    a = temp % 10;

    a += ( ( ( temp / 10 ) % 10 ) << 4 );

    temp = temp / 100;

    b = temp % 10;

    b += ( ( ( temp / 10 ) % 10 ) << 4 );

    c = temp / 100 ;

    c = (c <<8);

    c += b;

    c = (c<<8);   

    return( a + c );

}





//==========一个十六进制的LONG型转换为一个压缩的BCD码LONG型=========

unsigned long LongHEXToLongBCD( unsigned long temp )

{

        unsigned char i;

        unsigned long l_temp = 0;

        for ( i = 0; i <= 7; i ++ )

        {

                l_temp += ( ( temp % 10 ) << ( i * 4 ) );

                temp = temp / 10;

        }

        return(l_temp);

}

losan 发表于 2006-4-30 13:30:02

我也来一段汇编的:

ldi r16,0x55    ;要转换的数

ldi r17,10



DIV8:   SUB R19,R19

   LDI R18,9

D4:   ROL R16

   DEC R18

   BRNE D5

D5:   ROL R19

   SUB R19,R17

   BRCC D6

   ADD R19,R17

   CLC

   RJMP D4

D6:   SEC

   RJMP D4



结果:

R16为商(十位)8

R19为余数(个位)5

如果百位以上就自己再加了哈


-----此内容被losan于2006-04-30,13:32:23编辑过

mimidodo 发表于 2010-5-17 17:01:30

这个mark

xiaoliusheng 发表于 2015-3-24 22:55:29

汇编的比较牛逼....

DevLabs 发表于 2015-3-25 07:58:03

着坟挖得......

freeboyxd 发表于 2015-3-26 22:41:44

路过,留下记号...

NJ8888 发表于 2015-3-26 22:44:34

这个贴挖的深{:lol:}
页: [1]
查看完整版本: 请教一个将十六进制转换成十进制的写法!!!