C语言:单精度(float)和双精度(double)浮点数 与 十六进制(HEX) 之间转换
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<4;i++) printf("0x%X\n",data[i]); return 0; }
(2)共用体法
具体代码如下:
union { float fdata; unsigned char data[4]; }temp;
试用例如下:
int main(int argc, char *argv[]) { temp.fdata = 12.66; for(int i=0;i<4;i++) printf("0x%X\n",temp.data[i]); return 0; }
由于我的电脑系统是小端模式,所以低字节在前。
运行结果如下:
(3)memcpy()函数法
具体代码如下:
void Float_HEX (float fdata, unsigned char *hdata) { memcpy(hdata,&fdata,sizeof(fdata)); }
测试用例如下:
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<4;i++) printf("0x%X\n",data[i]); return 0; }
2. 双精度(double)转 十六进制(HEX)
(1)指针法
具体代码如下:
void Double_HEX (double Ddata, unsigned char *hdata) { unsigned char* tdata = (unsigned char*)(&Ddata); hdata[0] = tdata[0]; hdata[1] = tdata[1]; hdata[2] = tdata[2]; hdata[3] = tdata[3]; hdata[4] = tdata[4]; hdata[5] = tdata[5]; hdata[6] = tdata[6]; hdata[7] = tdata[7]; }
测试用例如下:
int main(int argc, char *argv[]) { 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<8;i++) printf("0x%X\n",data[i]); return 0; }
(2)共用体法
具体代码如下:
union { double Ddata; unsigned char data[8]; }temp;
测试用例如下:
int main(int argc, char *argv[]) { temp.Ddata = 12.66; for(int i=0;i<8;i++) printf("0x%X\n",temp.data[i]); return 0; }
(3)memcpy()函数法
具体代码如下:
void Double_HEX (double Ddata, unsigned char *hdata) { memcpy(hdata,&Ddata,sizeof(Ddata)); }
测试用例如下:
int main(int argc, char *argv[]) { 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<8;i++) printf("0x%X\n",data[i]); return 0; }
三、十六进制(HEX) 转 浮点数
1. 十六进制(HEX) 转 单精度(float)
具体代码如下:
int main(int argc, char *argv[]) { char data[4] = {0x5C,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; }
链接:https://blog.csdn.net/MQ0522/article/details/126394428
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!