请教一个将十六进制转换成十进制的写法!!!
比如将十六进制的OCR1A转换成十进制!!小弟"磨齿难忘"!!! 除10取余得个位,结果再除10取余得10位....直到商为0,只有余数. 谢了大虾,原来我也这样写的不过写错了!!! //========一个压缩的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);
} 我也来一段汇编的:
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编辑过 这个mark 汇编的比较牛逼.... 着坟挖得...... 路过,留下记号... 这个贴挖的深{:lol:}
页:
[1]