2017-04-27 129 views
0

我實際上從溫度傳感器獲得一個值(b'\xc8\x00')。我想將它轉換爲浮點值。是對的,我需要解碼它?如何將b' xc8 x00'轉換爲浮點型?

這裏是我的功能:

def ToFloat(data): 
    s = data.decode('utf-8') 
    print(s) 
    return s 

但是當我嘗試編譯它,我得到的錯誤:

'utf-8' codec can't decode byte 0xc8 in position 0: invalid continuation byte 
+3

什麼溫度,大約,你認爲價值到底?有一百萬種方法可以將兩個字符轉換爲數字,如果我們知道您的溫度計是在烤箱裏,還是在客廳或南極洲,這將有助於縮小它的範圍。 – Kevin

+0

編譯?在python中?你認爲str.decode應該做什麼?什麼是你似乎試圖轉換爲浮動的字符串? –

+1

'b'\ xc8 \ x00''代表什麼浮點值?它是什麼樣的浮點表示呢?這不是一種常見的IEEE格式,至少需要4個字節的數據,所以只有兩個字節是不夠的。如果你知道這個表示,那麼'struct'模塊似乎是一個可以使用的模塊。 – martineau

回答

2

你似乎有壓縮字節不是Unicode對象。使用struct.unpack

In [3]: import struct 
In [4]: struct.unpack('h', b'\xc8\x00')[0] 
Out[4]: 200 

格式h指定一個短的值(2個字節)。如果你的體溫值將始終是積極的,你可以使用H無符號短:

import struct 

def to_float(data): 
    return float(struct.unpack('H', data)[0]) 
0

注意ToFloat()是有點惱人,因爲它返回float但interpretes數據爲整數值。如果字節表示一個浮點數,那麼就有必要知道浮點數以何種格式打包到這兩個字節中(通常浮點數需要多於兩個字節)。

data = b'\xc8\x00' 
def ToFloat(data): 
    byte0 = int(data[0]) 
    print(byte0) 
    byte1 = int(data[1]) 
    print(byte1) 
    number = byte0 + 256*byte1 
    print(number) 
    return float(number)  

回報:200.0似乎是合理的。如果沒有,只要看看數據的含義和處理。