" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解python的二進制轉化模塊

 更新時間:2022年01月04日 16:23:28   作者:微小冷  
這篇文章主要為大家介紹了python的二進制轉化模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

在pyton中,通過struct模塊來對二進制進行轉換,主要包括兩大類函數(shù),即用于打包的pack和用于解包的unpack。

其中,struct.pack的輸入格式為struct.pack(format, v1, v2, ...),其中format為格式字符串,v1,v2..為將要轉成bytes的字符。

例如

>>> import struct
>>> struct.pack('i', 15)
b'\x0f\x00\x00\x00'
>>> struct.pack('iii', 15, 16, 17)
b'\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00'
>>> struct.pack('b', 255)   #b格式的取值范圍是-128到127
struct.error: byte format requires -128 <= number <= 127
>>> struct.pack('B', 200)
b'\xc8'
>>> struct.pack('B', 71)    #128以內(nèi)可用ASCII表示
b'G'

i代表int,15對應的二進制代碼為F000,故其輸出為b\x0f\x00\x00\x00。當格式字符串為iii時,說明要將三個數(shù)字以整數(shù)類型轉化為二進制。

其中,格式化字符串中的每個字符都代表一種數(shù)據(jù)類型,其中整型相關的字符如下,左側為帶符號整型,右側為無符號整型

 C語言類型 C語言類型標準大小
bsigned charBunsigned char1
hshortHunsigned short2
iintIunsigned int4
llongLunsigned long4
qlong longQunsigned long long8
nssize_tNsize_t 

其他類型

格式C 類型Python 類型標準大小
x填充字節(jié) 
cchar長度為1的字節(jié)串 
?_Boolbool1
e float2
ffloatfloat4
ddoublefloat8
schar[]字節(jié)串 
pchar[]字節(jié)串 
Pvoid*整數(shù) 

struct中提供了獲取標準大小的函數(shù),calcsize:

>>> struct.calcsize('B')
1
>>> struct.calcsize('i')
4

除了聲明被格式化時的數(shù)據(jù)類型,struct還可以指定對齊方式,例如

>>> struct.pack("i",15)
b'\x0f\x00\x00\x00'
>>> struct.pack(">i",15)    #小端序
b'\x00\x00\x00\x0f'
>>> struct.pack("<i",15)    #大端序
b'\x0f\x00\x00\x00'

其對應字符的含義分別為

@=<>!
本機本機小端大端網(wǎng)絡(大端)

其中默認為@,即本機字節(jié)順序。

在熟悉了pack之后,與之對偶的unpack也就沒啥難度了

>>> test = struct.pack("III",125,1255,12555)
>>> struct.unpack("III",test)
(125, 1255, 12555)

除了packunpackstruct模塊還提供了C語言風格的一對函數(shù)pack_intounpack_from,二者的聲明分別為

struct.pack_into(format, buffer, offset, v1, v2, ...)
struct.unpack_from(format, /, buffer, offset=0)

其中buffer表示緩沖流,在pack_into中,將v1,v2...offset的偏置打包入buffer中;在unpack_from中,將buffer中的數(shù)據(jù)從offset處依次取出。

struct中封裝了用于二進制處理的類Struct,按照以往經(jīng)驗,其pack函數(shù)的實現(xiàn)方法很有可能是下面這種

def pack(format,*args):
    return Struct(format).pack(args)

其中Struct的初始化方法就是輸入一個格式化字符串,例如

>>> s = struct.Struct("III")
>>> s.pack(1,2,3)
b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!

相關文章

  • 淺談Python __init__.py的作用

    淺談Python __init__.py的作用

    這篇文章主要介紹了淺談Python __init__.py的作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 如何表示python中的相對路徑

    如何表示python中的相對路徑

    在本篇文章里小編給大家分享的是關于python相對路徑寫法以及相關知識點內(nèi)容,需要的朋友們可以學習下。
    2020-07-07
  • Python基于yield遍歷多個可迭代對象

    Python基于yield遍歷多個可迭代對象

    這篇文章主要介紹了Python基于yield遍歷多個可迭代對象,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • python實現(xiàn)下載整個ftp目錄的方法

    python實現(xiàn)下載整個ftp目錄的方法

    這篇文章主要介紹了python實現(xiàn)下載整個ftp目錄的方法,文中給出了詳細的示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友可以一起來學習學習。
    2017-01-01
  • OpenCV 圖像旋轉、平移、縮放操作代碼

    OpenCV 圖像旋轉、平移、縮放操作代碼

    這篇文章主要介紹了OpenCV 圖像旋轉、平移、縮放,本文是 OpenCV圖像視覺入門之路的第7篇文章,本文詳細的進行了圖像的縮放 cv2.resize()、旋轉 cv2.flip()、平移 cv2.warpAffine()等操作,需要的朋友可以參考下
    2022-12-12
  • 重寫django的model下的objects模型管理器方式

    重寫django的model下的objects模型管理器方式

    這篇文章主要介紹了重寫django的model下的objects模型管理器方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Jupyter notebook如何修改平臺字體

    Jupyter notebook如何修改平臺字體

    這篇文章主要介紹了Jupyter notebook如何修改平臺字體,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Python pass詳細介紹及實例代碼

    Python pass詳細介紹及實例代碼

    這篇文章主要介紹了Python pass詳細介紹及實例代碼的相關資料,需要的朋友可以參考下
    2016-11-11
  • 基于PyQT5制作一個二維碼生成器

    基于PyQT5制作一個二維碼生成器

    這篇文章主要介紹了利用PyQT5制作一個簡單的二維碼生成器,并打包成exe可執(zhí)行程序。文中的示例代碼講解詳細,感興趣的同學可以了解一下
    2021-12-12
  • django中F與Q查詢的使用

    django中F與Q查詢的使用

    一般查詢都是單條件查詢,F(xiàn)和Q是組合條件查詢,本文主要介紹了django中F與Q查詢的使用,感興趣的可以了解一下
    2021-06-06

最新評論

鹤壁市| 新平| 合山市| 龙山县| 桐乡市| 恩平市| 防城港市| 惠安县| 正安县| 临猗县| 青海省| 巴彦县| 安仁县| 宣汉县| 衡水市| 云安县| 长阳| 旌德县| 修武县| 肥乡县| 廉江市| 玛纳斯县| 防城港市| 永嘉县| 宁德市| 保定市| 东乡族自治县| 木里| 涟水县| 松桃| 寿阳县| 安康市| 桐乡市| 嘉祥县| 沙河市| 霍山县| 涟水县| 丰都县| 临沧市| 中西区| 深泽县|