C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换 您所在的位置:网站首页 c程序浮点型 C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换

C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换

2024-06-21 11:43| 来源: 网络整理| 查看: 265

以下程序,都是在 C-Free5 的编译环境完成。 C语言 基础开发----目录

一、浮点数 数据结构 1. 单精度(float)浮点数----32位

具体结构如下表所示:

符号位 Sign (S)指数部分 Exponent (E)尾数部分 Mantissa (M)3130~2322~01bit 8bit 23bit 2. 双精度(double)浮点数----64位

具体结构如下表所示:

符号位 Sign (S)指数部分 Exponent (E)尾数部分 Mantissa (M)6362~5251~01bit 11bit 52bit 二、浮点数 转 十六进制(HEX)

使用 浮点数 转 十六进制(HEX) 工具转换结果如下: 在这里插入图片描述

浮点数单精度(float) 转 十六进制(HEX)双精度(double)转 十六进制(HEX)12.6641 4A 8F 5C40 29 51 EB 85 1E B8 52

下面程序实现转换,依照这个转换结果,验证。

1. 单精度(float) 转 十六进制(HEX) (1)指针法

具体代码如下:

void Float_HEX (float fdata, unsigned char *hdata) { unsigned char* tdata = (unsigned char*)(&fdata); hdata[0] = tdata[0]; hdata[1] = tdata[1]; hdata[2] = tdata[2]; hdata[3] = tdata[3]; }

测试用例如下:

int main(int argc, char *argv[]) { unsigned char data[4] = {0,0,0,0}; float fdata = 12.66; Float_HEX(fdata,data); for(int i=0;i temp.fdata = 12.66; for(int i=0;i unsigned char data[4] = {0,0,0,0}; float fdata = 12.66; Float_HEX(fdata,data); for(int i=0;i unsigned char data[8] = {0,0,0,0,0,0,0,0}; double Ddata = 12.66; Double_HEX(Ddata,data); for(int i=0;i temp.Ddata = 12.66; for(int i=0;i unsigned char data[8] = {0,0,0,0,0,0,0,0}; double Ddata = 12.66; Double_HEX(Ddata,data); for(int i=0;i0x5C,0x8F,0x4A,0x41}; float fdata = 0; memcpy(&fdata,data,sizeof(fdata)); printf("fdata=%f\n",fdata); return 0; }

运行结果如下: 在这里插入图片描述

2. 十六进制(HEX) 转 双精度(double)

具体代码如下:

int main(int argc, char *argv[]) { char data[8] = {0x52,0xB8,0x1E,0x85,0xEB,0x51,0x29,0x40}; double Ddata = 0; memcpy(&Ddata,data,sizeof(Ddata)); printf("Ddata=%f\n",Ddata); return 0; }

运行结果如下: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有