日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C语言:十六进制(HEX)和浮点类型(float、double)转换

發布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言:十六进制(HEX)和浮点类型(float、double)转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、浮點類型轉換為十六進制

方法1:用地址用指針

方法2:用共用體

方法3:?使用memcpy

2、十六進制轉換為浮點類型


近日在研究Modbus協議的時候遇到這樣一個情況:使用ModScan32軟件,可將HEX和浮點類型轉換,如下所示:

那么如何在程序設計中實現十六進制和浮點類型轉換呢?

C語言和C#語言中,對于浮點類型的數據采用單精度類型(float)和雙精度類型(double)來存儲,float數據占用32bit,double數據占用64bit,我們在聲明一個變量float f= 2.25f的時候,是如何分配內存的呢?如果胡亂分配,那世界豈不是亂套了么,其實不論是float還是double在存儲方式上都是遵從IEEE的規范的,float遵從的是IEEE R32.24 ,而double 遵從的是R64.53。

無論是單精度還是雙精度在存儲中都分為三個部分:

1、符號位(Sign) :0代表正,1代表為負;

2、指數位(Exponent):用于存儲科學計數法中的指數數據,并且采用移位存儲;

3、尾數部分(Mantissa):尾數部分。

其中float的存儲方式如下圖所示:

而雙精度的存儲方式為:

了解了基本概念后咱就開始代碼實現吧~

1、浮點類型轉換為十六進制

方法1:用地址用指針

#include "stdio.h"int main(void)
{float fa = 123.56;char farray[4] = {0};*(float*)farray = fa;printf("%f\n",*(float*)farray);return (0);
}

輸出結果:

123.559998

方法2:用共用體

#include "stdio.h"union {float fa;char farray[4];
}utemp;int main(void)
{int i = 0;float ft = 0.0;utemp.fa = (float)123.56;ft = *(float*)utemp.farray;printf("%f\n",ft);return (0);
}

?輸出結果:

123.559998

方法3:?使用memcpy

#include "stdio.h"
#include "string.h"int main(void)
{float fa;char farray[4];float ft; fa = 45.23;memcpy(farray,&fa,sizeof(farray));memcpy(&ft,&farray,sizeof(farray)); printf("%f\n",ft);return (0);
}

?輸出結果:

45.230000

2、十六進制轉換為浮點類型

#include "stdio.h"int main(void)
{unsigned char pMem[] = {0x66,0xE6,0xF0,0x42};float *p = (float*)pMem;printf("%g\r\n",*p);return 0;
}

??輸出結果:

120.45

?最后為各位分享一個十分便利的十六進制和浮點類型互相轉換的小工具:

參考鏈接,拓展學習:

1、浮點數類型在計算機里面的表示方法

2、浮點數在計算機中存儲方式

3、如何把一個float存到一個長度為4的char數組中?

總結

以上是生活随笔為你收集整理的C语言:十六进制(HEX)和浮点类型(float、double)转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。