发新帖我要提问
12
返回列表
打印

十六进制转十进制编程

[复制链接]
楼主: xvezhe
手机看帖
扫描二维码
随时随地手机跟帖
21
比如说,tab=0x7a;
num0 =  tab/100;
num1 = tab/100/10;   
num2 = tab%10;
num =100*num0 +10*num1+num2;

使用特权

评论回复
22
自然的天逸| | 2014-2-17 15:46 | 只看该作者
上面那个还有一点小错误 是这样的计算的 显示 百位 十为 个位
比如说,tab=0x7a;
num0 =  tab/100;
num1 = (tab%100)/10;   
num2 = tab%10;
num =100*num0 +10*num1+num2;

使用特权

评论回复
23
xvezhe|  楼主 | 2014-2-17 21:41 | 只看该作者
自然的天逸 发表于 2014-2-17 15:40
百位没有提取

我只提取十,个位的数据。。。

使用特权

评论回复
24
QuakeGod| | 2014-2-17 23:14 | 只看该作者
本帖最后由 QuakeGod 于 2014-2-17 23:21 编辑

那个不叫转换成十进制,可以转换成BDC格式。
或者转换成字符串,一个printf就解决了。
转换成BDC格式的话,如果用51汇编,可以用DA指令,就是十进制加法调整,只要几次加法和就可以了,不需要昂贵的除法。
附一小段51汇编程序
bintobcd16:
        ;in, r2,r3
        ;out r4,r5,r6
        clr  a
        mov  r4,a
        mov  r5,a
        mov  r6,a
        mov  r7,#16
bintobcd16re1:
        mov  a,r2
        rlc  a
        mov  r2,a
        mov  a,r3
        rlc  a
        mov  r3,a
        mov  a,r4
        addc a,r4
        da   a
        mov  r4,a
        mov  a,r5
        addc a,r5
        da   a
        mov  r5,a
        mov  a,r6
        addc a,r6
        da   a
        mov  r6,a
        djnz r7,bintobcd16re1
        ret

使用特权

评论回复
25
wuzhihuiqqyy| | 2014-2-18 00:53 | 只看该作者
汇编中十进制后不加h,十六进制加h,直接对内存单元进行操作

使用特权

评论回复
26
李冬发| | 2014-2-18 00:55 | 只看该作者
楼主没掌握“数制”,花点时间再读读。这个关要是不过,以后的路很难走。

使用特权

评论回复
27
xvezhe|  楼主 | 2014-2-18 08:20 | 只看该作者
李冬发 发表于 2014-2-18 00:55
楼主没掌握“数制”,花点时间再读读。这个关要是不过,以后的路很难走。 ...

恩恩,请指个知识点方向啊。。。

使用特权

评论回复
28
frlop| | 2014-2-18 08:46 | 只看该作者
自己补一下C语言基础吧。

使用特权

评论回复
29
qyihan| | 2014-2-18 10:54 | 只看该作者
11楼正解

使用特权

评论回复
30
hopewise| | 2014-2-19 11:26 | 只看该作者
/******************************************
* 名称:     dec_to_dec(uint16 b)()       
* 功能:     10进制→16进制
* 入口参数:
* 出口参数:
* 说明:     b--待要转换的10进制数
                     hex_buf---转换结果(16进制)                  
*******************************************/
void    dec_to_hex(uint16 b)
{                   
                int i;
                arr[0]=0;
                arr[1]=0;
                arr[3]=0;
                for (i=0;i <3;i++)   
        {   
                arr[i]=b%16;                                          //取余
                b=b/16;                                                      //整除
                if (b==0)   break;   
        }
                for (;i>=0;i--)      
                {
                                switch (arr[i])   
                {   
                         case 10:
                                                          arr[i]=0X0A;
                                                                  break;   
                         case 11: arr[i]=0X0B;
                                                                  break;   
                         case 12: arr[i]=0X0C;
                                                                  break;  
                         case 13: arr[i]=0X0D;
                                                                  break;
                         case 14: arr[i]=0X0E;
                                                                  break;  
                         case 15: arr[i]=0X0F;
                                                                  break;  
                         default:
                                                                  break;
                }   
                }
                hex_buf=(arr[2] << 8) | (arr[1] << 4) | arr[0];  
}



/******************************************
* 名称:     hex_to_dec()       
* 功能:     16进制→10进制
* 入口参数:
* 出口参数:
* 说明:     a--待要转换的16进制数
                     dec_buf---转换结果(10进制)                  
*******************************************/
void     hex_to_dec(uint a)
{            
        int   str[3];
        int   j;  
                j=0;
                str[0]=0;
                str[1]=0;
                str[3]=0;
        while(a)
        {
                str[j]=a%10;                                           //取余
                a/=10;                                                           //整除
                j++;
        }
                dec_buf=str[2]*100+str[1]*10+str[0];
}

使用特权

评论回复
31
Nick_Qiu| | 2014-2-19 11:38 | 只看该作者
uchar tt=0xf5;
uint tab;
个人觉得,你进入了误区;
table = 0xf5; 在处理器中存储的肯定是二进制,你要按10进制使用,或者按16进制使用那是你的事了。
如:
printf("%d",tba);
printf("%x",tba);

使用特权

评论回复
32
samwu59| | 2014-2-19 11:50 | 只看该作者
char a = 0xf5;
int i,j;
for(i = 0 i < 2; i++)  {
    j = (a >> i*4) & 0xF;
   j += j*(16^i);
}

使用特权

评论回复
33
gdgzwqz| | 2017-3-7 17:08 | 只看该作者
30楼,绝好的东东呀!!!

使用特权

评论回复
34
gdgzwqz| | 2017-3-7 17:09 | 只看该作者
hopewise 发表于 2014-2-19 11:26
/******************************************
* 名称:     dec_to_dec(uint16 b)()       
* 功能:     10进制 ...

绝好的东东呀!!! 谢谢!!!

使用特权

评论回复
35
小五武| | 2017-5-18 20:51 | 只看该作者
学习了,很好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则