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

[复制链接]
3574|8
 楼主| wen2204 发表于 2007-10-21 10:20 | 显示全部楼层 |阅读模式
我想把unsigned&nbsp;char&nbsp;类型的变量,比如0x8F转换成十进制140。确转不出来。<br />我定义&nbsp;<br />int&nbsp;QueryDecimal[]={10,11,12,13,14,15};<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;HexNum=0x8F;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;Decimalnum;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;i=HexNum&0xF0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取16进制高位<br />&nbsp;&nbsp;&nbsp;&nbsp;i=i&gt&gt4;<br />&nbsp;&nbsp;&nbsp;&nbsp;//查表得int&nbsp;类型的num1<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;j=&nbsp;HexNum&0x0F;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取16进制低位<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;由j查表得int&nbsp;类型的num2&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Decimalnum=num1*16+num2;<br /><br />怎么不对的啊?
wishcom 发表于 2007-10-21 12:33 | 显示全部楼层

你觉得有必要转换吗?

这样转换根本没必要,十进制数本身就是以16进制存储的。
wujiarui 发表于 2007-10-21 14:21 | 显示全部楼层

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

AT+CMGS=140,这个就是发送“41&nbsp;54&nbsp;2B&nbsp;43&nbsp;4D&nbsp;47&nbsp;53&nbsp;3D&nbsp;31&nbsp;34&nbsp;30”
 楼主| wen2204 发表于 2007-10-21 14:38 | 显示全部楼层

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

但0x8F总得先变成相等的十进制后,再转ASCII码的啊。<br />
wowow 发表于 2007-10-21 18:50 | 显示全部楼层

最简单的用sprintf就行了

sprintf(buf,&quot;AT+CMGS=%d&quot;,xx);<br />再发送字符串buf
mohanwei 发表于 2007-10-21 20:08 | 显示全部楼层

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

  
mohanwei 发表于 2007-10-22 18:57 | 显示全部楼层

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

不过这点“漏洞”远远要比自己写的小。<br />如果你的程序里需要输出int,uint,long,float……的ascii码,那么就要写N个函数来实现了。如果再要把N个不同变量的ascii码拼起来……
wishcom 发表于 2007-10-22 22:18 | 显示全部楼层

既然是漏洞就应该重视

如果实在不愿意自己写,其实也可以自己实现作一个缓冲区检查就好了。
 楼主| wen2204 发表于 2007-10-23 14:27 | 显示全部楼层

恩,明白了。谢谢大家了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部