51单片机C语言里 怎样将16进制 直接化成 10进制 的51单片机中c语言中如何将十六进制数转化为十进制

C\u8bed\u8a00\u4e2d16\u8fdb\u5236\u52a010\u8fdb\u5236\uff0c\u7ed3\u679c\u662f16\u8fdb\u5236\u5417\uff1f

%d\u8f93\u51fa\u7684\u662f10\u8fdb\u5236 %x\u8f93\u51fa\u7684\u662f\u5341\u516d\u8fdb\u5236
\u6bd4\u5982printf("%d",pos); \u8f93\u51fa153
printf("%x",pos); \u8f93\u51fa 99
\u5b83\u4eec\u90fd\u662f\u6574\u5f62\u7684...

\u5982\u679c\u4f60\u4ec5\u4ec5\u662f\u4f7f\u7528\u8f6c\u6362\u7ed3\u679c\u7684\u8bdd\uff0c\u90a3\u4e48\u8d4b\u503c\u8bed\u53e5\u53ef\u4ee5\u81ea\u52a8\u8f6c\u6362\u3002\u6bd4\u5982\uff1a
unsigned char x,y;
y=0x5a;
x=y;
\u4f60\u8f93\u51fa\u683c\u5f0f\u662f10\u8fdb\u5236\uff0c\u90a3\u4e48\u53d8\u91cf\u8868\u793a\u7684\u5c31\u662f\u5341\u8fdb\u5236\u6570\u3002

我这儿有一个进制转换的程序,你可以参考一下:
#include<stdio.h>
#include<math.h>
#include<string.h>
int count=0;
void *tentoBOH(int a,int n)
{
int t,i=0,j,str[50],*p;
char str1[50],*q,temp;
while(a!=0)
{
t=a%n;
if(n==16)
{
if(t<=9&&t>=0)str1[i++]=(char)('0'+t);
if(t>9&&t<16)str1[i++]=(char)('A'-10+t);
}
else
str[i++]=t;
a=a/n;
count++;
}
for(i=0,j=count-1;i<count/2;i++,j--)
{
t=str[i];
str[i]=str[j];
str[j]=t;
temp=str1[i];
str1[i]=str1[j];
str1[j]=temp;
}
if(n==16)
return q=str1;
else
return p=str;
}
int BOHtoTen(char str[],int n)
{
int len,i,a=0;
char t;
len=(int)strlen(str);
for(i=0;i<len/2;i++)
{
t=str[i];
str[i]=str[len-1-i];
str[len-1-i]=t;
}
i=0;
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')
a+=(str[i]-'0')*(int)pow(n,i);
if(str[i]>='a'&&str[i]<='f')
a+=(str[i]-'a'+10)*(int)pow(n,i);
if(str[i]>='A'&&str[i]<='F')
a+=(str[i]-'A'+10)*(int)pow(n,i);
i++;
}
return a;
}
void main()
{
int a,i,n,m,*p;
char *q,str[20];
printf("请输入一个十进制数a= ");
scanf("%d",&a);
printf("请输入一个进制数n= ");
scanf("%d",&n);
if(n==16)q=tentoBOH(a,n);
else p=tentoBOH(a,n);
printf("输出正整数%d的%d进制为:",a,n);
if(n==16)
for(i=0;i<count;i++)
printf("%c",*(q+i));
else
for(i=0;i<count;i++)
printf("%d",*(p+i));
printf("\n请输入字符串str= ");
scanf("%s",str);
printf("\n请输入该字符串的进制m= ");
scanf("%d",&m);
printf("\n该%d进制数%s转换成十进制数为:%d\n",m,str,BOHtoTen(str,m));
}

U8 a,b; //定义a,b为8位二进制数
U16 temp; //定义temp为16位二进制数
temp=a<<8 | b; //将 a左移8位和b合到一起
temp 就是你想要的数,(无所谓十进制还是十六进制)
例: a=0x3B b=0xC2 那么 temp=0x3BC2 十进制就是15298
在程序里面直接引用变量temp就可以,
例:U8 a,b;
a=temp/10000;
b=temp%10000;
那么 a=1,b=5298;

功能:十六进制转为十进制
//
// 输入: const unsigned char *hex 待转换的十六进制数据
// int length 十六进制数据长度
//
// 输出:
//
// 返回: int rslt 转换后的十进制数据
//
// 思路:十六进制每个字符位所表示的十进制数的范围是 0 ~255 ,进制为 256
// 左移 8 位 (<<8) 等价乘以 256
//
/////////////////////////////////////////////////////////
unsigned long HextoDec(const unsigned char *hex, int length)
{
int i;
unsigned long rslt = 0;

for(i=0; i<length; i++)
{
rslt += (unsigned long)(hex[i])<<(8*(length-1-i));

}

return rslt;
}

应该是自动转化的的,不用考虑

C中就不存在这个问题了,不过我明白你的意思,去看看 sprintf 函数吧

扩展阅读:51单片机编程入门自学 ... 51单片机精确延时1秒 ... c++编程 ... 51单片机1分钟延时程序 ... 女生highc是c5还是c6 ... c语言怎样设置延时一秒 ... 51单片机手机编译器 ... 51单片机简易闹钟 ... 单片机c语言编程入门教程 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网