c 十进制数转十六进制

news/2024/10/30 13:33:40/

有3种方式实现,其中两种是使用系统函数,另一种是直接自己编写。

使用系统函数实现要加入#include <stdlib.h>,自己编写则不需要这个头文件。

下面的代码就是3种方式的实现,包括2位的整数和任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。


利用系统函数有

1. char *  itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。所以代码可以为:

char  buffer [33];  //用于存放转换好的十六进制字符串,可根据需要定义长度
char  * inttohex( int  aa)
{
     itoa (aa, buffer, 16);
     return  (buffer);
}

2. sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为:

char  buffer [33];  //用于存放转换好的十六进制字符串,可根据需要定义长度
char  * inttohex( int  aa)
{
     sprintf (buffer,  "%x" , aa);
     return  (buffer);
}

3. 自己编写

如果参数只要两位数的整数,那么很简单。代码如下:

char  buffer [3];  //用于存放转换好的十六进制字符串。由于只要支持2位整数,所以长度3即可
char  * inttohex( int  aa)
{
     if  (aa / 16 < 10)    //计算十位,并转换成字符 
         buffer[0] = aa / 16 +  '0' ;
     else
         buffer[0] = aa / 16 - 10 +  'A' ;
     if  (aa % 16 < 10)    //计算个位,并转换成字符
         buffer[1] = aa % 16 +  '0' ;
     else
         buffer[1] = aa % 16 - 10 +  'A' ;
     buffer[2] =  '\0' ;    //字符串结束标志
     return  (buffer);
}

如果参数是任意整数,由于计算方法是每次都除以16和对16取余数,余数以倒序的顺序排列就是结果,所以最佳方法是用递归函数(当然循环也可以,但需要最后再进行倒序)。递归代码如下:

char  buffer [33];  //用于存放转换好的十六进制字符串,可根据需要定义长度
char  * inttohex( int  aa)
{
     static  int  i = 0;
     if  (aa < 16)             //递归结束条件 
     {
         if  (aa < 10)         //当前数转换成字符放入字符串 
             buffer[i] = aa +  '0' ;
         else
             buffer[i] = aa - 10 +  'A' ;
         buffer[i+1] =  '\0' //字符串结束标志 
     }
     else
     {
         inttohex(aa / 16);   //递归调用 
         i++;                 //字符串索引+1 
         aa %= 16;            //计算当前值
         if  (aa < 10)         //当前数转换成字符放入字符串 
             buffer[i] = aa +  '0' ;
         else
             buffer[i] = aa - 10 +  'A' ;
     }
     return  (buffer);
}


最后测试代码如下(以sprintf为例,其余只要替换inttohex函数中的代码内容即可):

#include <stdio.h>
#include <stdlib.h>
char  buffer [33];  //用于存放转换好的十六进制字符串,可根据需要定义长度
char  * inttohex( int  aa)
{
     sprintf (buffer,  "%x" , aa);
     return  (buffer);
}
int  main ()
{
   int  num;
   char  * hex_str;
   printf  ( "Enter a number: " );
   scanf  ( "%d" ,&num);
   hex_str = inttohex (num);
   printf  ( "Hexadecimal number: %sH\n" , hex_str);
   return  0;
}

http://www.ppmy.cn/news/312119.html

相关文章

Windows 10 周年更新版 1607

微软短期内不会像以往那样每隔几年就推出新版本的Windows操作系统了&#xff0c;而是将Windows 10作为一个持续服务来对待。说人话就是&#xff0c;微软会在Windows 10的更新补丁中不断加入新功能&#xff0c;不再像以前那样不断地开发新版本的Windows操作系统了。这是好事&…

10进制转换为16进制

十进制小数转换为16进制小数可采用乘16取整法&#xff0c;即&#xff1a; 十进制小数转R进制小数&#xff0c;方法为乘R取整&#xff0c;每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为R进制小数&#xff0c;这时就需要取近似值…

16进制转换10进制

16转10 16进制数的第0位的权值为16的0次方&#xff0c;第1位的权值为16的1次方&#xff0c;第2位的权值为16的2次方…… 所以&#xff0c;在第N&#xff08;N从0开始&#xff09;位上&#xff0c;如果是是数 X &#xff08;X 大于等于0&#xff0c;并且X小于等于 15&#xff…

【你好,windows】Windows 10 X64 19H2 18363.1556 终结版2021.5.16

1、采用蓝点网提供Windows 10 Version 1909 (19H2) 官方原版镜像&#xff0c;提取专业工作站版本制作&#xff0c;原版下载地址&#xff1a;https://www.landiannews.com/archives/65395.html 升级2021年5月12日微软发布补丁。OS内部版本 18363.1556 在本次更新后&#xff0c;W…

WIN10 10162

激活秘钥&#xff1a;8N67H-M3CY9-QT7C4-2TR7M-TXYCV 64位简体中文版(4.03GB) http://iso.esd.microsoft.com/W10IP/4B33E0680A465FBA52C09A34454D5EB6/Windows10_InsiderPreview_x64_ZH-CN_10162.iso 32位简体中文版(3.03GB)&#xff1a; http://iso.esd.microsoft.com/W10IP/…

利用Windows Installer安装程序时1603错误的解决方案!

今天&#xff0c;终于把visual studio 2008给下载下来了。但是在安装的时候发生错误了。 [04/26/08,10:31:57] Microsoft .NET Framework v3.5: [2] Error code 1603 for this component means "安装时发生严重错误"[04/26/08,10:31:57] Microsoft .NET Framework v…

数据治理体系指南

01 数据治理之数据资产管理 数据资产与数据资产管理的定义 随着大数据时代的到来&#xff0c;人们已经认识到数据是一种无形的宝贵资产&#xff0c;谷歌、Facebook、阿里巴巴、腾讯等企业市值高达数千亿美元&#xff0c;不仅在于其独特的商业模式和市场垄断地位&#xff0c;更…

入职字节外包一个月,我离职了····

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…