mokongking

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

posted on   虎啸岳林  阅读(3839)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

统计信息

点击右上角即可分享
微信分享提示