编写一个将十进制整数转换为十六进制字符串的函数
1个回答
展开全部
#include <stdio.h>
#include <string.h>
void d2h(long x,char s[])
{
int i,j,c;
for(i=-1;x>0;i)
{
s[++i]=x%16;
x/=16;
}
for(j=i;j>=0;j--)
if(s[j]<10)s[j]+=48;
else s[j]+=55;
s[i+1]='\0';
for(j=0;j<i;j++,i--)
{c=s[j];s[j]=s[i];s[i]=c;}
}
void main(void)
{
char s[17];
long x;
scanf("%ld",&x);
d2h(x,s);
printf("%ld=%sH\n",x,s);
}
追问
for(i=-1;x>0;i)
{
s[++i]=x%16;
x/=16;
}
for(j=i;j>=0;j--)
if(s[j]<10)s[j]+=48;
else s[j]+=55;
s[i+1]='\0';
for(j=0;j<i;j++,i--)
{c=s[j];s[j]=s[i];s[i]=c;}
做一些解释吧。
追答
for(i=-1;x>0;i)
{
s[++i]=x%16;
x/=16;
}
将10进制的x通过除法,把每次的余数保存到数组s中(低位在前),然后x=x/16,此循环直到x=0时结束。
for(j=i;j>=0;j--)
if(s[j]<10)s[j]+=48;
else s[j]+=55;
把每次得到的余数转换为字符0~9转换为‘0’~‘9’,10~15转换为‘A’~‘F’。
s[i+1]='\0';
置串尾结束标志。
for(j=0;j<i;j++,i--)
{c=s[j];s[j]=s[i];s[i]=c;}
将低位在前的十六进制字符串反转。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询