簡體   English   中英

struct.unpack 的目的

[英]Purpose of struct.unpack

我一直試圖解決這個問題已經有一段時間了,但我一無所獲。 我有兩個無符號整數。 這意味着四個字節。

3A BC 00 00

這些代表一個浮點值。 我想使用 python 將它們轉換為浮點數。 我可以使用 python 使用struct.unpack來做到這一點。

具體來說:

values = [0x3A, 0xBC, 0x00, 0x00]
struct.unpack('>f', bytes(values))

有人可以解釋這個特定unpack命令嗎?

我知道>部分反轉位(大端實現)。 所以他們將是00 00 BC 3A f是做什么的? 根據文檔,這意味着浮動......這是什么意思? 我嘗試省略它,但我得到了struct.error: unpack requires a buffer of 0 bytes

最后,為什么會發生bytes轉換?

struct模塊處理 python 對象和連續字節序列之間的轉換。 [0x3A, 0xBC, 0x00, 0x00]是 python 整數的列表(即對int對象的引用),而不是連續的字節序列。 一個bytes object 是一個連續的字節序列,可以用 0 到 255 之間的整數迭代來初始化,所以這是第一步。

現在,python 應該如何解釋這些字節? 他們是integer,一堆花車,一堆字符? 這就是格式字符串的用途。 "f"的意思是“給我一個 4 字節的浮點數”。 正如你所注意到的,“>”是大端的,但它有點微妙。 Python 將抓取 4 個字節,然后處理字節序,最后進行浮點轉換。 假設輸入是[0x3A, 0xBC, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44] 格式“>ff”將返回 2 個浮點數。

最后,這不是“兩個整數”。 它是符號位、8 位指數和 23 位尾數,這是單精度浮點數的標准格式。

暫無
暫無

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

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