日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

《Python Cookbook 3rd》笔记(3.5):字节到大整数的打包与解包

發(fā)布時(shí)間:2023/12/13 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Python Cookbook 3rd》笔记(3.5):字节到大整数的打包与解包 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字節(jié)到大整數(shù)的打包與解包

問(wèn)題

你有一個(gè)字節(jié)字符串并想將它解壓成一個(gè)整數(shù)。或者,你需要將一個(gè)大整數(shù)轉(zhuǎn)換為一個(gè)字節(jié)字符串。

解法

假設(shè)你的程序需要處理一個(gè)擁有 128 位長(zhǎng)的 16 個(gè)元素的字節(jié)字符串。比如:

data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'

為了將 bytes 解析為整數(shù),使用 int.from_bytes() 方法,并像下面這樣指定字節(jié)順序:

>>> len(data) 16 >>> int.from_bytes(data, 'little') 69120565665751139577663547927094891008 >>> int.from_bytes(data, 'big') 94522842520747284487117727783387188 >>>

為了將一個(gè)大整數(shù)轉(zhuǎn)換為一個(gè)字節(jié)字符串,使用 int.to_bytes() 方法,并像下面這樣指定字節(jié)數(shù)和字節(jié)順序:

>>> x = 94522842520747284487117727783387188 >>> x.to_bytes(16, 'big') b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004' >>> x.to_bytes(16, 'little') b'4\x00#\x00\x01\xef\xcd\x00\xab\x90x\x00V4\x12\x00' >>>

討論

大整數(shù)和字節(jié)字符串之間的轉(zhuǎn)換操作并不常見(jiàn)。然而,在一些應(yīng)用領(lǐng)域有時(shí)候也會(huì)出現(xiàn),比如密碼學(xué)或者網(wǎng)絡(luò)。例如, IPv6 網(wǎng)絡(luò)地址使用一個(gè) 128 位的整數(shù)表示。如果你要從一個(gè)數(shù)據(jù)記錄中提取這樣的值的時(shí)候,你就會(huì)面對(duì)這樣的問(wèn)題。

作為一種替代方案,你可能想使用 6.11 小節(jié)中所介紹的 struct 模塊來(lái)解壓字節(jié)。這樣也行得通,不過(guò)利用 struct 模塊來(lái)解壓對(duì)于整數(shù)的大小是有限制的。因此,你可能想解壓多個(gè)字節(jié)串并將結(jié)果合并為最終的結(jié)果,就像下面這樣:

>>> data b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004' >>> import struct >>> hi, lo = struct.unpack('>QQ', data) >>> (hi << 64) + lo 94522842520747284487117727783387188 >>>

字節(jié)順序規(guī)則 (little 或 big) 僅僅指定了構(gòu)建整數(shù)時(shí)的字節(jié)的低位高位排列方式。我們從下面精心構(gòu)造的 16 進(jìn)制數(shù)的表示中可以很容易的看出來(lái):

>>> x = 0x01020304 >>> x.to_bytes(4, 'big') b'\x01\x02\x03\x04' >>> x.to_bytes(4, 'little') b'\x04\x03\x02\x01' >>>

如果你試著將一個(gè)整數(shù)打包為字節(jié)字符串,那么它就不合適了,你會(huì)得到一個(gè)錯(cuò)誤。如果需要的話,你可以使用 int.bit_length() 方法來(lái)決定需要多少字節(jié)位來(lái)存儲(chǔ)這個(gè)值。

>>> x = 523 ** 23 >>> x 335381300113661875107536852714019056160355655333978849017944067 >>> x.to_bytes(16, 'little') Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: int too big to convert >>> x.bit_length() 208 >>> nbytes, rem = divmod(x.bit_length(), 8) >>> if rem: ... nbytes += 1 ... >>> >>> x.to_bytes(nbytes, 'little') b'\x03X\xf1\x82iT\x96\xac\xc7c\x16\xf3\xb9\xcf...\xd0' >>>

總結(jié)

以上是生活随笔為你收集整理的《Python Cookbook 3rd》笔记(3.5):字节到大整数的打包与解包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美寡妇性猛交 | 日韩国产在线一区 | 清清草视频 | 中文字幕第15页 | 久久亚洲私人国产精品va | 91青青青 | 中文字幕在线观看三区 | 女同动漫免费观看高清完整版在线观看 | 日韩欧美一 | 日韩大尺度视频 | 韩国电影一区 | 8x8ⅹ8成人免费视频观看 | 豆豆色成人网 | 91人妻一区二区 | 欧美三级在线播放 | 日本无遮挡边做边爱边摸 | 日本欧美不卡 | 成人综合站 | 午夜福利理论片在线观看 | 五月婷婷爱 | 国产18在线 | 日韩精品在线网站 | china国模大尺度pics | 久久视频免费看 | 成人动漫在线观看免费 | 欧美专区亚洲专区 | 亚洲福利视频导航 | 成人91免费视频 | 国产精品污www一区二区三区 | 噜噜噜噜私人影院 | 东北高大丰满bbbbzbbb | 超碰五月天 | 午夜黄色一级片 | h片网站在线观看 | 中文字幕免费观看视频 | 激情啪啪网站 | 国产在线久 | 91蜜桃视频 | 婷婷午夜 | 精品国产69 | 一级小毛片| 噜噜啪啪 | 少妇熟女一区二区三区 | 4438五月天| aaa国产视频| 中文字幕在线播 | 亚洲精品高清视频在线观看 | 精品三级视频 | 日韩免费一级 | 国产精品成人av性教育 | 免费美女毛片 | 亚洲国产精品久 | 欧美日韩高清一区 | 免费看成人aa片无码视频羞羞网 | 午夜肉体高潮免费毛片 | 91精品99| 中文字幕影片免费在线观看 | 天天搞夜夜爽 | 18无码粉嫩小泬无套在线观看 | 国产成人+综合亚洲+天堂 | 欧美亚洲另类图片 | 动漫美女被x | 深夜视频在线观看免费 | 成人在线播放视频 | www国产成人 | 天天干夜夜想 | 亚洲成人播放 | 黄色网络在线观看 | 动漫美女被吸乳奶动漫视频 | 色小说综合 | 少妇高潮一区二区三区69 | 高潮毛片无遮挡免费看 | 淫品色影院 | 成人h在线 | 无码人妻精品一区二区三区9厂 | 欧美日韩亚洲精品一区二区 | 亚洲国产综合在线 | 亚洲精品成人电影 | 国产精品欧美一区二区 | 亚洲理伦电影 | 国内一级视频 | 97神马影院 | 蜜桃成熟时李丽珍在线观看 | 中文字幕av在线免费 | 色呦呦网站入口 | 国产主播99 | 国产精品无码一区二区三区免费 | 96国产精品| 国产调教在线 | 美女在线网站 | 日日碰日日操 | 在线观看中文字幕一区 | 激情综合五月 | 受虐m奴xxx在线观看 | 色屁屁一区二区三区视频 | 欧美成人tv| av黄色一级片 | 韩国黄色av | 91av免费在线观看 |