牛东 发表于 2014-11-24 15:39:04

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

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


这句怎么解释啊!!!求教!!!{:sweat:}
p_ucBCD_bit4=ulNumberTemp%100000000/10000000; //4个字节最大值表示

霸气侧漏 发表于 2014-11-24 15:42:00

知道进制转换的规则就好了

牛东 发表于 2014-11-24 15:43:09

霸气侧漏 发表于 2014-11-24 15:42
知道进制转换的规则就好了

这句怎么解释啊!!!求教!!!
p_ucBCD_bit4=ulNumberTemp%100000000/10000000; //4个字节最大值表示

cjt5132 发表于 2014-11-24 16:28:21

这程序怎么会这么麻烦?不是分分钟的事情?

lxa0 发表于 2014-11-24 19:17:00

做数字钟吗?
那就无须这么麻烦
做数字钟时单片机内部的ram用不完
我是6位的
那就一位用一个ram单元
根本不需要去做什么16进制到bcd的转换
这样搞不是自己跟自己过不去嘛

牛东 发表于 2014-11-25 08:19:55

lxa0 发表于 2014-11-24 19:17
做数字钟吗?
那就无须这么麻烦
做数字钟时单片机内部的ram用不完


兄弟,是吴坚鸿的程序,正在学习中!!!

lxa0 发表于 2014-11-25 19:19:46

你管他是谁的程序呢
写代码是越简单越好
页: [1]
查看完整版本: 请教十六进制数值转换成组合BCD码,看不懂啊!!