最近在利用串口讀取溫度採集模塊上面的數據時發現返回過來的數據是16進制的IEEE754類型,很顯然這不是咱們想要看到的,所以咱們必須對他進行解析:
由於我用的是Java,因此首先翻了相關文檔,發現還真提供的有:java
Float.intBitsToFloat(hex)
python
固然本身也能夠手寫一個,這時咱們就須要瞭解浮點數在計算機中是如何表示的了:
在計算機中,浮點數的存儲均採用4字節的IEEE-754格式,如,浮點數32.375的IEE表示形式以下
app
public static double transfer(String hexStr){ StringBuffer binaryStr = new StringBuffer(); for(int i=0;i< hexStr.length();i+=2){ String a = hexStr.substring(i,i+2); int c = Integer.parseInt(a,16); String item = String.format("%08d",Integer.parseInt(Integer.toBinaryString(c))); binaryStr.append(item); } int n = Integer.parseInt(binaryStr.substring(1,9),2); String mStr = binaryStr.substring(9,binaryStr.length()-1); double sum = 0; for(int i =1;i<=mStr.length();i++){ if(mStr.charAt(i-1)=='1'){ sum = sum+Math.pow(0.5,i); } } double a =( Math.pow(2,n-127))*(1+sum); return a; }
def transfer(hexStr): ret = str(); for x in range(0,len(hexStr),2): a = hexStr[x:x+2]; intItem = int(a,16); binnaryStr = bin(intItem)[2:len(bin(intItem))]; binnaryStr = "%(binnary)08d"%{'binnary':int(binnaryStr)} ret = ret+binnaryStr; s= int(ret[0]); n = int(ret[1:9],2); mStr = ret[9:len(ret)-1]; m = float(); print(mStr); for x in range(1,len(mStr)-1,1): if mStr[x-1] == "1": print(x); m=m+math.pow(0.5,x); val = math.pow(-1,s)*(math.pow(2,n-127))*(1+m); print(val) return ret;