编写一个将十进制整数转换为十六进制字符串的函数

 我来答
听不清啊
高粉答主

2013-11-17 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#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;}
将低位在前的十六进制字符串反转。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式