十进制小数转十六进制(浮点型转16进制)C语言代码+2种方法

十六进制简介

        十六进制(简写为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博客

在MATLAB中,将二进制小数换为十六进制可以通过以下步骤实现: 1. 将二进制小数乘以2,取整数部分作为十六进制小数的第一位系数。 2. 将乘积的小数部分继续乘以2,取整数部分作为十六进制小数的第二位系数。 3. 重复上述步骤,直到得到所需的精度或达到设定的小数点位数。 例如,将二进制小数0.1101换为十六进制小数。 1.0.1101乘以2,得到1.101(整数部分为1,小数部分0.101)。 2.0.101乘以2,得到1.010(整数部分为1,小数部分0.010)。 3.0.010乘以2,得到0.100(整数部分0小数部分0.100)。 因此,0.1101的十六进制表示为0x1.A。 请注意,这只是一个简单的例子,实际上的换可能需要更多的步骤和精度,具体取决于所需的结果和精度要求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MATLAB进制换](https://blog.csdn.net/Jinzhi_Guan/article/details/127260000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [十进制换成二进制十六进制方法](https://blog.csdn.net/qq_45605223/article/details/101520057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值