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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个将十进制整数转换为十六进制字符串的函数相关的知识,希望对你有一定的参考价值。

参考技术A

#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;
将低位在前的十六进制字符串反转。

本回答被提问者采纳

使用显式类型转换将十六进制整数转换为字符?

【中文标题】使用显式类型转换将十六进制整数转换为字符?【英文标题】:Converting a hexadecimal Integer into a character using explicit type conversion? 【发布时间】:2012-09-27 20:39:07 【问题描述】:

我编写了以下代码,但是 o/p 不是预期的?有人指导我吗?

问题:编写一个示例程序来声明一个十六进制整数并使用显式类型转换将其转换为字符?

class hexa

public static void main(String ar[])

    int hex=0xA;
    System.out.println(((char)hex));


请告诉我: 为什么输出有差异

/*code 1*/
int hex = (char)0xA; 
System.out.println(hex); 
/*code 2*/
int hex = 0xA; 
System.out.println((char)hex);

【问题讨论】:

输出结果是什么?您的期望是什么? 为什么输出有差异??? /*代码 1*/ int hex = (char)0xA; System.out.println(hex); /*代码 2*/ int hex = 0xA; System.out.println((char)hex); 【参考方案1】:
int hex = 0xA; 
System.out.println( (char)hex );

十六进制值 0xA(或十进制 10)是 ASCII 中的“\n”(换行符)。 因此输出。

编辑(感谢halex 在 cmets 中提供更正:

int hex = (char) 0xA;
System.out.println(hex); //here value of hex is '10', type of hex is 'int', the overloaded println(int x) is invoked.

int hex = 0xA;
System.out.println((char) hex); //this is equivalent to System.out.println( '\n' ); since the int is cast to a char, which produces '\n', the overloaded println(char x) is invoked.

【讨论】:

为什么输出有差异 /*code 1*/ int hex = (char)0xA; System.out.println(hex); /*代码 2*/ int hex = 0xA; System.out.println((char)hex); 关于您的编辑:在您编写的代码的 cmets 中,toStringintchar 上被调用,但这是不正确的。没有自动装箱,但为 intchar 类型调用了适当的 println 重载版本。【参考方案2】:

我假设您希望打印字母 A。 而不是print 使用printf

int hex=0xA;
System.out.printf("%X%n", hex);

【讨论】:

如果是这样,那么 %n 是做什么的 换行符。没有那个 printf 更像是print 而不是println

以上是关于编写一个将十进制整数转换为十六进制字符串的函数的主要内容,如果未能解决你的问题,请参考以下文章

编一函数,将一个十进制整数转换为十六进制整数

C语言编程(将十六进制字符串转换为十进制整数 )

c语言编一函数将一十进制整数转换为十六进制整数,谢谢

405. 数字转换为十六进制数

405. 数字转换为十六进制数

位运算————数字转换为十六进制