抛砖引玉:一个将4个字节的十六进制转为十进制的程序
在门禁行业经常要用到将十六进制卡号转为十进制的情况,当然对于比较小的数,直接除,取余就好了。但是对于这种超过10亿的数,我没有找到更好方法,为此,我上传自己写的程序,希望大家共同探讨u32 Card_Num,tee;
u8 syy,qwbw,sww,qb,sg,i;
Card_Num=0XFFFFFFFF
i=0;
while(Card_Num>=1000000000)
{
Card_Num=Card_Num-1000000000;
i++;
}
syy=i<<4;
i=0;
while(Card_Num>=100000000)
{
Card_Num=Card_Num-100000000;
i++;
}
syy=syy+i;
i=0;
while(Card_Num>=10000000)
{
Card_Num=Card_Num-10000000;
i++;
}
qwbw=i<<4;
i=0;
while(Card_Num>=1000000)
{
Card_Num=Card_Num-1000000;
i++;
}
qwbw=qwbw+i;
i=0;
while(Card_Num>=100000)
{
Card_Num=Card_Num-100000;
i++;
}
sww=i<<4;
i=0;
while(Card_Num>=10000)
{
Card_Num=Card_Num-10000;
i++;
}
sww=sww+i;
i=0;
while(Card_Num>=1000)
{
Card_Num=Card_Num-1000;
i++;
}
qb=i<<4;
i=0;
while(Card_Num>=100)
{
Card_Num=Card_Num-100;
i++;
}
qb=qb+i;
i=0;
while(Card_Num>=10)
{
Card_Num=Card_Num-10;
i++;
}
sg=i<<4;
sg=sg+Card_Num; mark 很长。先写个两字节的BCD转换函数,之后把数值分解为4位的再调用两字节的就好了,可以弄个循环来执行;
两字节的也可以这样弄,相信多几次调用不会对时间影响太大 syy=十亿/亿?
qwbw=千万/百万?
1 现有的代码可以再优化一下,将重复的部分写成内联函数。
2 Card_Num用取膜的方式直接获取它的数位,然后再移位转为syy的值,可以省去方法1的循环步骤,不知是否可行
页:
[1]