我在python中有一個程序,其中我想用一些值接收一個幀。這個值由xbee發送。將字符中的浮點數轉換爲浮點數(PYTHON)
的XBee發送由工會結構中的4個字節分裂的浮動,這樣的事情:
typedef union _data{
float f;
char s[4];
} myFloat;
因此,例如,17.23給我10,-41,-119,65所以,我必須在python中恢復所有這些值,當我得到4後,將它們轉換爲浮點數。自從我讀取每一個函數(serial.read())以獲取浮點數結果後,我該做些什麼?
這些值將被python腳本接收到,我想再次將它們加入到一個float中。我在python中閱讀了關於struct的內容,但是我並不擅長python,我不明白它是如何工作的。
我使用serial.read逐個讀取字節。
有什麼想法?
目前尚不清楚是什麼給你帶來麻煩。如果你讀了四個字節並把它們放到一個字符串's'中,那麼你可以用'struct.unpack('4b',s)'將它們轉換成'(10,-41,-119,65)', 'struct.unpack('f',s)[0]'(['0]''是必要的,因爲你會得到一個元素的元組,而不是一個浮點數。)這是否有幫助? – DSM
但是,如何在字符串中設置字節?我試過:s = [10,-41,-119,65] print struct.unpack('f',s)[0] 但它告訴我它需要長度爲4的字符串參數...我怎麼讀4個字節並將它們保存在一個字符串數組中? – Biribu
我以爲你總是把浮子裝進字符中,並想把這些字符變成浮子?無論如何,如果你有一個數字列表,你可以使用'struct.pack'將它們打包成一個字符串:try'n = [10,-41,-119,65]'然後'struct.pack('4b' ,* n)'得到一個四字節的字符串。我認爲你應該編輯你的問題,使之更清楚你現在擁有什麼以及你想要結束什麼。 – DSM