打印

请大侠给我个ADS里面的十六进制转十进制的代码

[复制链接]
2627|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wen2204|  楼主 | 2007-10-21 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想把unsigned char 类型的变量,比如0x8F转换成十进制140。确转不出来。
我定义 
int QueryDecimal[]={10,11,12,13,14,15};
    
    uint8 HexNum=0x8F;
    int Decimalnum;
    
    i=HexNum&0xF0;          //取16进制高位
    i=i>>4;
    //查表得int 类型的num1
   
    j= HexNum&0x0F;         //取16进制低位
    // 由j查表得int 类型的num2    
    
    Decimalnum=num1*16+num2;

怎么不对的啊?

相关帖子

沙发
wishcom| | 2007-10-21 12:33 | 只看该作者

你觉得有必要转换吗?

这样转换根本没必要,十进制数本身就是以16进制存储的。

使用特权

评论回复
板凳
wujiarui| | 2007-10-21 14:21 | 只看该作者

你那不叫十进制,那是ASCII码

AT+CMGS=140,这个就是发送“41 54 2B 43 4D 47 53 3D 31 34 30”

使用特权

评论回复
地板
wen2204|  楼主 | 2007-10-21 14:38 | 只看该作者

串口在发送的时候是ASCII码。

但0x8F总得先变成相等的十进制后,再转ASCII码的啊。

使用特权

评论回复
5
wowow| | 2007-10-21 18:50 | 只看该作者

最简单的用sprintf就行了

sprintf(buf,"AT+CMGS=%d",xx);
再发送字符串buf

使用特权

评论回复
6
mohanwei| | 2007-10-21 20:08 | 只看该作者

6楼说得对,sprintf的功能强到你笑……

使用特权

评论回复
7
mohanwei| | 2007-10-22 18:57 | 只看该作者

sprintf是不会去检查你的缓冲区是不是够大……

不过这点“漏洞”远远要比自己写的小。
如果你的程序里需要输出int,uint,long,float……的ascii码,那么就要写N个函数来实现了。如果再要把N个不同变量的ascii码拼起来……

使用特权

评论回复
8
wishcom| | 2007-10-22 22:18 | 只看该作者

既然是漏洞就应该重视

如果实在不愿意自己写,其实也可以自己实现作一个缓冲区检查就好了。

使用特权

评论回复
9
wen2204|  楼主 | 2007-10-23 14:27 | 只看该作者

恩,明白了。谢谢大家了

使用特权

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

本版积分规则

17

主题

54

帖子

1

粉丝