IEEE 754標準 32位浮點數(float)轉十進制 C語言

關於32位浮點數轉整形的相關知識可以參考這篇博客:https://blog.csdn.net/u011575671/article/details/74518933

用Modbus讀PLC的浮點數寄存器的時候讀取的內容爲IEEE 754標準的32位寄存器,需要轉換一下,可以根據自己的需求轉換,直接貼代碼:

//============================================================
//函數名稱 :Float32
//函數功能 :將32位的float轉換爲10進制正數(0~99999)捨棄小數,IEEE 754標準
//輸入變量 :NumFloat32:待轉換32位浮點數	
//返 回 值 :計算結果 無符號整形 u32 ,返回-1爲負數或者超限;
//調試記錄 :
//============================================================
unsigned int Float32(const unsigned int NumFloat32)
{
	
	unsigned char  sbit,ebits;
	unsigned int mbits,result;

	sbit = NumFloat32 >> 31;
	ebits =  ( NumFloat32 >> 23 ) & 0xff ;
	mbits =  NumFloat32 & 0x7fffff ; 

	if(sbit)    //若需要負數部分,sbit爲1時,result*-1,去掉判斷;
	{
		return -1 ;
	}
	ebits -= 127;    //得到階碼<0,即結果小於1,返回0;
	if(ebits < 0)
	{
		return 0;
	}
	result = (1 << ebits) +(mbits >> (23 - ebits));     
    /*若有小數位數精度要求,mbits的0~(23 - ebits)位可以適當保留處理;可以進行自定義處理
    result = (1 << ebits) +(mbits >> (23 - ebits)); 改爲 result = (1 << (ebits + 10))* 1000 / 1024 + (mbits >> (13 - ebits)) * 1000 / 1024 ; 
    結果擴大了1000倍,result/1000爲整數部分,result%1000爲小數*/
	if(result > 99999)
	{
		return -1 ;
	}
	printf("result = %d\n",result);
	
	return result;	
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章