簡體   English   中英

帶有 TypeError 的 Python struct.unpack 錯誤:需要一個類似字節的對象,而不是“str”

[英]Python struct.unpack errors with TypeError: a bytes-like object is required, not 'str'

有人可以幫忙解決以下代碼行和錯誤嗎? 我不熟悉python值轉換。

產生錯誤的具體行是:

value = struct.unpack("<h",chr(b)+chr(a))[0]

TypeError:需要一個類似字節的對象,而不是“str”

代碼片段是:

                    if packet_code ==0x80: # raw value
                        row_length = yield
                        a = yield
                        b = yield
                        value = struct.unpack("<h",chr(b)+chr(a))[0]

輸入數據為:

b'\x04\x80\x02\x00\xb2\xcb\xaa\xaa\x04\x80\x02\x00p\r\xaa\xaa\x04\x80\x02\x00] \xaa\xaa\x04\x80\ x02\x00@=\xaa\xaa\x04\x80\x02\x007F\xaa\xaa\x04\x80\x02\x00\!\xaa\xaa\x04\x80\x02\x00=@\xaa\xaa\ x04\x80\x02\x00=@\xaa\xaa\x04\x80\x02\x00i\x14\xaa\xaa\x04\x80\x02\x00] \xaa\xaa\x04\x80\x02\x00p\r \xaa\xaa\x04\x80\x02\x00\x80\xfd\xaa\xaa

我正在使用 python 3.5。 此代碼似乎適用於舊版本。

這是類似解析器代碼的鏈接,它可能與以前版本的 Python 一起使用: Parser Code Link

這是關於如何從設備RAW Wave Value(16 位) 發送數據的說明的鏈接

該數據值由兩個字節組成,代表一個原始波形樣本。 它的值是一個有符號的 16 位整數,范圍從 -32768 到 32767。Value 的第一個字節表示二進制補碼值的高位,而第二個字節表示低位。 要重建完整的原始波形值,只需將第一個字節左移 8 位,然后將第二個字節按位或按位:

short raw = (Value[0]<<8) | Value[2];

其中 Value[0] 是高位字節,Value 1是低位字節。

在位運算不方便的系統或語言中,可以用以下算術運算代替:

raw = Value[0]*256 + Value[1];
if( raw >= 32768 ) raw = raw - 65536;

非常感謝任何幫助,因為我目前陷入困境。

當您使用 Python 2.x 時, str是一個字節數組。 對於 Python 3,您必須使用如下bytes

struct.unpack("<h", bytes([b, a]))[0]

如果您使用 python3,您可以使用以下幾行接收到的數據並將其轉換為短數據類型。

struct.unpack('<h', data)
struct.unpack('<h', data[0:4])
struct.unpack('<h', b''.join(…))

如果它以列表的形式接收數據,它使用將數組轉換為字節:

struct.unpack('<h', bytes(data))

請記住,您必須將您的信息轉換為字節而不是作為 str 發送,以便使用所需數據類型的解包和解壓縮信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM