欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python struct.unpack() 用法及常見錯誤詳解

 更新時間:2025年06月05日 11:05:25   作者:極客不孤獨  
struct.unpack() 是 Python 中用于將二進(jìn)制數(shù)據(jù)(字節(jié)序列)解析為 Python 數(shù)據(jù)類型的函數(shù),通常與 struct.pack() 配對使用,下面給大家介紹Python struct.unpack()用法及常見錯誤,感興趣的朋友一起看看吧

struct.unpack() 是 Python 中用于將二進(jìn)制數(shù)據(jù)(字節(jié)序列)解析為 Python 數(shù)據(jù)類型的函數(shù),通常與 struct.pack() 配對使用。它根據(jù)指定的格式字符串(format string)解析字節(jié)流,并返回一個包含解析結(jié)果的元組。

一、函數(shù)語法

struct.unpack(format, buffer)
  • format:格式字符串,定義數(shù)據(jù)的解析規(guī)則(字節(jié)順序、數(shù)據(jù)類型、數(shù)量等)。
  • buffer:包含二進(jìn)制數(shù)據(jù)的緩沖區(qū)(如 bytes、bytearray 或支持緩沖協(xié)議的對象)。

返回值:包含解析后數(shù)據(jù)的元組。

二、格式字符串詳解

格式字符串由兩部分組成:

字節(jié)順序/對齊字符(可選):

字符含義大小端
@本地順序(默認(rèn))系統(tǒng)依賴
=本地標(biāo)準(zhǔn)大小系統(tǒng)依賴
<小端(Little-Endian)低位在前
>大端(Big-Endian)高位在前
!網(wǎng)絡(luò)順序(大端)RFC 標(biāo)準(zhǔn)

數(shù)據(jù)類型字符(必選):

字符C 類型Python 類型字節(jié)數(shù)
x填充字節(jié)跳過字節(jié)1
ccharbytes (長度1)1
bsigned charint1
Bunsigned charint1
?_Boolbool1
hshortint2
Hunsigned shortint2
iintint4
Iunsigned intint4
llongint4
Lunsigned longint4
qlong longint8
Qunsigned long longint8
ffloatfloat4
ddoublefloat8
schar[]bytes長度見下文
pPascal 字符串bytes1+長度
Pvoid*int系統(tǒng)依賴

特殊用法

特殊用法

  • s:需指定長度,如 10s 表示解析 10 字節(jié)的字符串。
  • 數(shù)字前綴:3I 表示連續(xù)解析 3 個無符號整數(shù)。

三、使用示例

示例 1:解析整數(shù)和浮點數(shù)

import struct
# 二進(jìn)制數(shù)據(jù):小端順序 (<) + int (i) + float (f)
buffer = b'\x01\x00\x00\x00\xcd\xcc\x8c@'
data = struct.unpack('<if', buffer)  # 解析1個int和1個float
print(data)  # 輸出: (1, 7.000000476837158)

示例 2:解析字符串

# 數(shù)據(jù):大端 (>) + 4字節(jié)字符串 (4s)
buffer = b'ABCD'
data = struct.unpack('>4s', buffer)
print(data)  # 輸出: (b'ABCD',)

示例 3:解析混合類型

# 數(shù)據(jù):小端 (<) + short (h) + 3字節(jié)字符串 (3s) + float (f)
buffer = b'\x01\x00XYZ\x00\x00\x80?'
data = struct.unpack('<h3sf', buffer)
print(data)  # 輸出: (1, b'XYZ', 1.0)

示例 4:跳過填充字節(jié)

# 格式: 小端 (<) + char (c) + 填充1字節(jié) (x) + int (i)
buffer = b'A\x00\x02\x00\x00\x00'
data = struct.unpack('<cx i', buffer)
print(data)  # 輸出: (b'A', 2)

示例 5:解析數(shù)組

# 解析3個連續(xù)的 unsigned short (H)
buffer = b'\x01\x00\x02\x00\x03\x00'
data = struct.unpack('<3H', buffer)
print(data)  # 輸出: (1, 2, 3)

四、關(guān)鍵注意事項

緩沖區(qū)長度必須匹配
使用 struct.calcsize(format) 驗證格式字符串所需的字節(jié)數(shù):

fmt = '<2i f'
buffer = b'\x00' * struct.calcsize(fmt)  # 創(chuàng)建匹配長度的緩沖區(qū)

字節(jié)順序至關(guān)重要
大端/小端錯誤會導(dǎo)致解析數(shù)值異常:

# 錯誤示例:大端數(shù)據(jù)用小端解析
buffer = b'\x00\x00\x00\x01'  # 大端表示的整數(shù) 1
struct.unpack('<I', buffer)   # 錯誤!解析為 16777216 (0x01000000)

字符串處理
s 類型返回 bytes 對象,需用 .decode() 轉(zhuǎn)為字符串:

data = struct.unpack('5s', b'Hello')[0]
print(data.decode('utf-8'))  # 輸出: 'Hello'

內(nèi)存對齊問題
默認(rèn)格式 @ 會按本地對齊方式插入填充字節(jié)。使用 = 或標(biāo)準(zhǔn)順序(</>)避免對齊。

五、常見錯誤

  • struct.error: unpack requires a buffer of X bytes

緩沖區(qū)長度與格式字符串不匹配。

  • 解析指針類型 (P)

結(jié)果依賴平臺(32/64位),通常應(yīng)避免使用。

通過合理設(shè)計格式字符串,struct.unpack() 可高效處理二進(jìn)制協(xié)議(如網(wǎng)絡(luò)數(shù)據(jù)、文件格式)。

到此這篇關(guān)于Python struct.unpack() 用法詳解的文章就介紹到這了,更多相關(guān)Python struct.unpack() 用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python lambda函數(shù)基本用法實例分析

    Python lambda函數(shù)基本用法實例分析

    這篇文章主要介紹了Python lambda函數(shù)基本用法,結(jié)合實例較為詳細(xì)的分析了Python lambda函數(shù)的功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-03-03
  • 使用python制作游戲下載進(jìn)度條的代碼(程序說明見注釋)

    使用python制作游戲下載進(jìn)度條的代碼(程序說明見注釋)

    這篇文章主要介紹了用python制作游戲下載進(jìn)度條的代碼(程序說明見注釋),代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • python redis 批量設(shè)置過期key過程解析

    python redis 批量設(shè)置過期key過程解析

    這篇文章主要介紹了python redis 批量設(shè)置過期key過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Python matplotlib 繪制雙Y軸曲線圖的示例代碼

    Python matplotlib 繪制雙Y軸曲線圖的示例代碼

    Matplotlib是非常強(qiáng)大的python畫圖工具,這篇文章主要介紹了Python matplotlib 繪制雙Y軸曲線圖,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Python字符串格式化%s%d%f詳解

    Python字符串格式化%s%d%f詳解

    這篇文章主要介紹了Python字符串格式化%s%d%f詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • python實現(xiàn)滑動拼圖驗證碼擺脫煩人的驗證碼輸入

    python實現(xiàn)滑動拼圖驗證碼擺脫煩人的驗證碼輸入

    這篇文章主要為大家介紹了python實現(xiàn)滑動拼圖驗證碼擺脫煩人的驗證碼輸入方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • django redis的使用方法詳解

    django redis的使用方法詳解

    本文主要介紹了django redis的使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 在Linux系統(tǒng)上安裝Python的Scrapy框架的教程

    在Linux系統(tǒng)上安裝Python的Scrapy框架的教程

    這篇文章主要介紹了在Linux系統(tǒng)上安裝Python的Scrapy框架的教程,Scrapy是著名的專門針對搜索引擎的爬蟲制作而研發(fā)的Python框架,需要的朋友可以參考下
    2015-06-06
  • Python打印斐波拉契數(shù)列實例

    Python打印斐波拉契數(shù)列實例

    這篇文章主要介紹了Python打印斐波拉契數(shù)列的方法,實例分析了基于Python實現(xiàn)斐波那契數(shù)列的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 淺談Python中的異常和JSON讀寫數(shù)據(jù)的實現(xiàn)

    淺談Python中的異常和JSON讀寫數(shù)據(jù)的實現(xiàn)

    今天小編就為大家分享一篇淺談Python中的異常和JSON讀寫數(shù)據(jù)的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評論