十六进制简介

        十六进制(简写为hex或下标16),在数学中是一种逢16进1的进位制。通常用0-9,a-f(或A-F)表示16个基数,即0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15。如:十六进制数1F,F是个位数表示15,1是十位数表示1个16,那么它转换为十进制数即为31,16+15=31。16进制数是计算机中常用的进数制,比如颜色代码#FFFFFF、Unicode码U+200D等都可用16进制数表示。

进制转十六进制原理

        十进制小数转十六进制小数,整数部分方法为除十六取余再倒序,小数部分方法为乘十六取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为十六进制小数,这时就需要取近似值。

以1234.567为例:

拓展:十进制小数转换为其他进制小数

         十进制小数转换为其他进制的方法与转换为十六进制的方法相同,十进制小数转R进制小数,整数部分方法为除R取余再倒序,小数部分方法为乘R取整,每次乘以相应之后基数后取结果的整数部分即可。需要注意的是并非所有的十进制小数都能完全转化为R进制小数,这时就需要取近似值。

C语言代码实例

方法一:

#include <stdio.h>
#include <string.h>

void main()
{
	char integer[32]="0";
    char decimal[32]="0";
    char HEX[] = "0123456789ABCDEF";
    char hex[64];
    char hex_temp;
    int i,j,k = 0;
    double num, decimal_temp ,integer_temp = 0;
   	printf("输入一个小数:");
   	scanf("%lf", &num);
    integer_temp = num;

    while (integer_temp)
    {
		integer[i++] = HEX[(int)integer_temp % 16];   //对十进制数求余并最终与HEX[]数组中的字符匹配
		integer_temp = (int)integer_temp / 16;
    }

    integer[i]='.';

    for(j = i - 1; j-k > 0; j--)//调换整数的16进制顺序
    {
		hex_temp = integer[j];
		integer[j] = integer[k++];
		integer[i-j-1] = hex_temp;
    }

    decimal_temp = num-(int)num;

    for(i = 0; i < 6;i++)//保留6位有效数字
    {
		decimal_temp = decimal_temp * 16;
        decimal[i] =  HEX[(int)decimal_temp];
		decimal_temp = decimal_temp -(int)decimal_temp;
		if(decimal_temp == 0) 
		{
		   decimal[i+1]='\0';
			break;
		}
    }
	strcpy(hex,integer);
	strcat(hex,decimal);
	puts(hex);
}

验证:在线进制转换工具

方法二:

#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
   char out[20]="0";
   char out1[20]="0";
   double temp;
   double data;
   int integer=0,i=0;
   double decimal=0;
   printf("输入一个小数:");
   scanf("%lf",&data);
   integer = (int)data;
   decimal = data - integer;

   for(i = 0; i < 10;i++)
   {
	decimal = decimal*16;
        sprintf(out1+i,"%X",(int)decimal);
	temp = decimal -(int)decimal;
	decimal=temp;
	if(temp == 0) 
        {
	   out1[i+1]='\0';
           break;
        }
   }
   sprintf(out,"%X.",integer);
   strcat(out,out1);
   printf("out=%s\n",out);

return 0;
}

验证:在线进制转换工具
       

IEEE 754标准格式方式存储的浮点转HEX:

符点数(小数)转十六进制C语言代码实例+原理解释(强制类型转换+联合体转换)_xiaohai@Linux的博客-CSDN博客

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐