C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换 | 您所在的位置:网站首页 › c程序浮点型 › C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换 |
以下程序,都是在 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 实验室设备网 版权所有 |