在程序中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函数,照着做也没有成功,请高手指点一下!谢谢!
此帖出自
小平头技术问答
大部分IDE都支持以10进制或者16进制显示,你设置成十进制显示就行了。
再说你这函数写的,思路有点十八弯的感觉。看样子,你是想转成BCD码?
char buf[8];
sprintf(buf, "%d", AD_Result);
我就想把AD_Result这个十六进制数转化其对应的十进制数,我之前也参考过sprintf这个函数,请问下您这个buf[8]中的8取值的原因?
我随便选的,16位数据最大的范围位-32768 - 32767 或者 0 - 65535,最长6个字符,加上一个 ,共7个,选8可以。
至于你说的转换,整数没有在计算机存储中没有十进制还是十六进制之分,只能说你的基础有点薄弱。
要么就是把整数转成BCD码表示,要么转成10进制或者十六进制表示的字符串。
int HEX2OTC(char src)
你的程序在没有输入输出的时候是不需要进行这种运算的,只在需要和人交互的时候才要变成十进制,调试察看时是有显示方式设置的,一旦变成十进制就不能再做任何运算了,所以这种运算除了多占存储没有任何意义.
一周热门 更多>