單片機模塊化程序: IEEE754規約,浮點數和16進制之間的轉換


 

 

 

 

前言

  現在很多通信都需要傳輸各種數據,所有的儀器儀表都是把數據轉化為16進制以后傳輸

  為了使轉換通用,所以才有了 IEEE754規約

 

直接上菜

  

typedef union Resolve
{
  float float_data;
  long long_data;
  char char_table[4];
}Resolve_Typedef;

 

 

 

 

 

 

 

 

 

 

 

254 轉為16進制

  

 

 

  

 

 

  注意:我使用的是STM32,它儲存數據的時候低位在前高位在后

 

  咱比較喜歡這樣看數據 00 00 00 FE  這就是254

 

 

65536 轉為16進制

  

 

 

  

 

 

  00 01 00 00  這就是65536的16進制表示

 

 

說明

  大家有沒有疑問為什么寫的是轉化為4字節

  

 

 

  大家如果做儀器儀表通信做久了就會發現幾乎都是轉換為4字節

 

  只不過在傳輸的時候有的儀器儀表是先傳輸高位

 

  就像咱上面的 65536  16進制是   00 01 00 00

 

  有極少數的儀器儀表先傳輸低位  00 00 01 00

 

 

 

 

220.5 轉為16進制

  

 

 

  

 

 

  

 

 

 

 

 

 

 

 

 

 

 

有16進制浮點數數據了,轉為浮點數

  假設數據是 00 80 5C 43 

  

 

 

  

 

 

 

擴展 C# 實現

65536 轉為16進制

   byte[] byt = BitConverter.GetBytes(65536);//轉為byt,默認就是轉成4字節

  轉換之后  

  byt[0] = 0x00;

  byt[1] = 0x00;

  byt[2] = 0x01;

  byt[3] = 0x00;

 

  byt[0] 存儲的是最低位,和上面的單片機一樣

  如果通信規定先傳輸高位,00 01 00 00 那么傳輸的時候

  byt[3],byt[2],byt[1],byt[0]      

 

 

 

220.5 轉為16進制

//和咱單片機定義聯合體解析一樣的道理
//轉為byt,默認就是轉成4字節
byte[] byt = BitConverter.GetBytes(220.5f);

轉換之后:

byt[0] = 0x00;
byt[1] = 0x80;
byt[2] = 0x5c;
byt[3] = 0x43;

 

 

注意:220.5f  后面需要加f

否則會按照double數據類型進行轉換

按照 double 進行轉換的,轉換出來是8字節

byt[0] = 0x00;

byt[1] = 0x00;

byt[2] = 0x00;

byt[3] = 0x00;

byt[4] = 0x00;
byt[5] = 0x90;
byt[6] = 0x6B;
byt[7] = 0x40;

 

有16進制整形數據了,轉為整形數據

  假設數據是65536    : 00 01 00 00

  

  byte[] byteValue = new byte[4];

  byteValue[3] = 0x00;
  byteValue[2] = 0x01;
  byteValue[1] = 0x00;
  byteValue[0] = 0x00;


  int intValue = BitConverter.ToInt32(byteValue,0);

 

  intValue 就是 65536

  注意

  

 

 

  倒過來填寫的

 

  因為C#默認是低位放到低位,高位放到高位(小端模式)

 

 

有16進制浮點數數據了,轉為浮點數

  假設數據是 220.5     :43 5C 80 00

  

  byte[] byteValue = new byte[4];

  byteValue[0] = 0x43;
  byteValue[1] = 0x5c;
  byteValue[2] = 0x80;
  byteValue[3] = 0x00;


  float floatValue = BitConverter.ToSingle(byteValue, 0);

 

  floatValue計算出來就是 220.5

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM