请教十六进制数值转换成组合BCD码,看不懂啊!!

2020-01-21 21:39发布

本帖最后由 牛东 于 2014-11-24 15:42 编辑

/*************************************************

                把十六进制数值转换成组合BCD码函数

*************************************************/
void number_to_BCD4(const unsigned char *p_ucNumber,unsigned char *p_ucBCD_bit4)
{
        unsigned long ulNumberTemp=0; //4个字节
        unsigned char ucTemp=0;//单字节

        ulNumberTemp=p_ucNumber[3]; //把4个字节的数值合并成一个32位long类型数据,高位在数组下标大的方向,低位在数组下标小的方向
        ulNumberTemp=ulNumberTemp<<8;
        ulNumberTemp=ulNumberTemp+p_ucNumber[2];
        ulNumberTemp=ulNumberTemp<<8;
        ulNumberTemp=ulNumberTemp+p_ucNumber[1];
        ulNumberTemp=ulNumberTemp<<8;                         
        ulNumberTemp=ulNumberTemp+p_ucNumber[0];
       
        p_ucBCD_bit4[3]=ulNumberTemp%100000000/10000000; //4个字节最大值表示:十进制为4294967295,十六进制为ffffffff,
        p_ucBCD_bit4[3]=p_ucBCD_bit4[3]<<4;         //前半4位存第8位组合BCD码  
        ucTemp=ulNumberTemp%10000000/1000000;
        p_ucBCD_bit4[3]=p_ucBCD_bit4[3]+ucTemp; //后半4位存第7位组合BCD码
       
        p_ucBCD_bit4[2]=ulNumberTemp%1000000/100000;
        p_ucBCD_bit4[2]=p_ucBCD_bit4[2]<<4;         //前半4位存第6位组合BCD码
        ucTemp=ulNumberTemp%100000/10000;
        p_ucBCD_bit4[2]=p_ucBCD_bit4[2]+ucTemp; //后半4位存第5位组合BCD码
       
        p_ucBCD_bit4[1]=ulNumberTemp%10000/1000;
        p_ucBCD_bit4[1]=p_ucBCD_bit4[1]<<4;            //前半4位存第4位组合BCD码
        ucTemp=ulNumberTemp%1000/100;
        p_ucBCD_bit4[1]=p_ucBCD_bit4[1]+ucTemp; //后半4位存第3位组合BCD码
       
        p_ucBCD_bit4[0]=ulNumberTemp%100/10;
        p_ucBCD_bit4[0]=p_ucBCD_bit4[0]<<4;     //前半4位存第2位组合BCD码
        ucTemp=ulNumberTemp%10;
        p_ucBCD_bit4[0]=p_ucBCD_bit4[0]+ucTemp; //后半4位存第1位组合BCD码
}


这句怎么解释啊!!!求教!!!
  p_ucBCD_bit4[3]=ulNumberTemp%100000000/10000000; //4个字节最大值表示
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
霸气侧漏
1楼-- · 2020-01-22 00:45
知道进制转换的规则就好了
牛东
2楼-- · 2020-01-22 02:31
霸气侧漏 发表于 2014-11-24 15:42
知道进制转换的规则就好了

这句怎么解释啊!!!求教!!!
  p_ucBCD_bit4[3]=ulNumberTemp%100000000/10000000; //4个字节最大值表示
cjt5132
3楼-- · 2020-01-22 03:08
这程序怎么会这么麻烦?不是分分钟的事情?
lxa0
4楼-- · 2020-01-22 08:48
做数字钟吗?
那就无须这么麻烦
做数字钟时单片机内部的ram用不完
我是6位的
那就一位用一个ram单元
根本不需要去做什么16进制到bcd的转换
这样搞不是自己跟自己过不去嘛
牛东
5楼-- · 2020-01-22 10:32
 精彩回答 2  元偷偷看……
lxa0
6楼-- · 2020-01-22 15:05
你管他是谁的程序呢
写代码是越简单越好

一周热门 更多>