4251|7

333

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

我这个“十六进制转十进制函数”错在哪里? [复制链接]

在程序中AD采样得到一个十六进制数:

#define uint16  unsigned int
uint16  AD_Result=0;

AD_Result=ADRESL&0x00FF;   
AD_Result|=ADRESH<<8;

我想把AD_Result这个十六进制数转化为十进制数,为后面处理方便。
我在线调试得出AD_Result值形式如:0x12AB
我编写了这个转化函数:
int HEX2OTC(char *src)
{
   int i,t;
   int sum=0;
   char s[4]=0;
   s[0]=((src>>12)&0x000f);
   s[1]=(((src>>8)&0x000f);
   s[2]=((src>>4)&0x000f);
   s[3]=((src>>0)&0x000f);
   for(i=0;i<4;i++)
    {
       if(s[i]<='9')
          t=s[i]-'0';
    else
          t=s[i]-'A'+10;
    sum=sum*16+t;
   return sum;
}
但是实际调试中发现我打算定义S[]为字符型数组,但是在线查看也是一个十六进制数,如0x01 0x02 0x0A 0x0B
怎么改进下?

有没有简单一点的转化?看网上有使用 sprintf函数,照着做也没有成功,请高手指点一下!谢谢!

最新回复

这个问题实际上应该是将二进制0001 0010 1010 1011转化为10进制数,  详情 回复 发表于 2015-1-26 09:58
点赞 关注
 

回复
举报

6040

帖子

204

TA的资源

版主

沙发
 
其实你这种问法是稍微有点问题,这根本不用转换,只是个显示的问题。
大部分IDE都支持以10进制或者16进制显示,你设置成十进制显示就行了。
再说你这函数写的,思路有点十八弯的感觉。看样子,你是想转成BCD码?
char buf[8];
sprintf(buf, "%d", AD_Result);

点评

我就想把AD_Result这个十六进制数转化其对应的十进制数,我之前也参考过sprintf这个函数,请问下您这个buf[8]中的8取值的原因?  详情 回复 发表于 2015-1-24 21:54
 
 
 

回复

333

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
lcofjp 发表于 2015-1-24 21:36
其实你这种问法是稍微有点问题,这根本不用转换,只是个显示的问题。
大部分IDE都支持以10进制或者16进制显示,你设置成十进制显示就行了。
再说你这函数写的,思路有点十八弯的感觉。看样子,你是想转成BCD码?
char buf[8];
sprintf(buf, "%d", AD_Result);

我就想把AD_Result这个十六进制数转化其对应的十进制数,我之前也参考过sprintf这个函数,请问下您这个buf[8]中的8取值的原因?



点评

我随便选的,16位数据最大的范围位-32768 - 32767 或者 0 - 65535,最长6个字符,加上一个\0,共7个,选8可以。 至于你说的转换,整数没有在计算机存储中没有十进制还是十六进制之分,只能说你的基础有点薄弱。  详情 回复 发表于 2015-1-24 22:13
 
 
 

回复

6040

帖子

204

TA的资源

版主

4
 
面纱如雾 发表于 2015-1-24 21:54
我就想把AD_Result这个十六进制数转化其对应的十进制数,我之前也参考过sprintf这个函数,请问下您这个buf[8]中的8取值的原因?

我随便选的,16位数据最大的范围位-32768 - 32767 或者 0 - 65535,最长6个字符,加上一个\0,共7个,选8可以。
至于你说的转换,整数没有在计算机存储中没有十进制还是十六进制之分,只能说你的基础有点薄弱。
要么就是把整数转成BCD码表示,要么转成10进制或者十六进制表示的字符串。




 
 
 

回复

112

帖子

0

TA的资源

一粒金砂(中级)

5
 
int HEX2OTC(char *src)  
int HEX2OTC(char src)
 
 
 

回复

4005

帖子

0

TA的资源

版主

6
 
首先你的转化函数得需要乘除10的运算才能得到结果,仅靠移位是不行的.
你的程序在没有输入输出的时候是不需要进行这种运算的,只在需要和人交互的时候才要变成十进制,调试察看时是有显示方式设置的,一旦变成十进制就不能再做任何运算了,所以这种运算除了多占存储没有任何意义.
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

7
 
电脑处理的数,都是二进制,如果把它分块,四位一块,那么就是16进制,处理任何其它进制,都是不方便的。所以, 楼主也别想着要 “ 转换 ” 什么的。

只有在显示时----逐位显示时,才有 “ 转换 ” 的需要。

这些是计算机方面的基础知识,建议楼看看这方面的知识, 不然楼主为个常识问题纹起劲来,会影响你以后的学习。
 
 
 

回复

450

帖子

43

TA的资源

一粒金砂(高级)

8
 
这个问题实际上应该是将二进制0001 0010 1010 1011转化为10进制数,
 
个人签名一心一意,精益求精
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表