前言
現在很多通信都需要傳輸各種數據,所有的儀器儀表都是把數據轉化為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