是否有蟒蛇的快捷方式到32位變量,也就是說,a1a2a3a4
分成a1
,a2
,a3
,a4
快?我已經通過將值更改爲十六進制然後分割它來完成它,但是看起來像浪費時間做int
- >string
- >int
。打破了32位數字分成單獨的域
回答
Python中並沒有真正的32位變量。你是這個意思嗎?
x = 0xa1a2a3a4
a4 = int(x & 0xff)
a3 = int((x >> 8) & 0xff)
a2 = int((x >> 16) & 0xff)
a1 = int(x >> 24)
由於SilentGhost指出的那樣,你不需要INT轉換,因此你可以這樣做:
a4 = x & 0xff
a3 = (x >> 8) & 0xff
a2 = (x >> 16) & 0xff
a1 = x >> 24
注意,在舊版本的Python,第二個版本會如果多頭返回x的值大於0x7fffffff,否則爲int。第一個版本總是返回int。在較新版本的Python中,這兩種類型是unified,因此您不必擔心這些細節。
你爲什麼要做'int'轉換? – SilentGhost 2010-01-26 12:51:36
SilentGhost:因爲他可能會使用Python 2.x,他可能希望將結果作爲一個int,而不是很長。這不是必要的,但它也不會受傷。如果您願意,歡迎您省略int轉換。 – 2010-01-26 12:53:16
沉默的幽靈:我現在已經發布了兩個版本。 :) – 2010-01-26 12:55:49
使用按位運算。
例如:
myvar = 0xcdf100cd
a0 = myvar & 0xff
a1 = (myvar >> 8) & 0xff
a2 = (myvar >> 16) & 0xff
a3 = (myvar >> 24) & 0xff
的&0xff
保持值的低8位和零的其餘部分,而位位移運算符(>>
)用於你提取字節轉移到這些低8位。
標準庫模塊struct做的是短期工作:
>>> import struct
>>> x = 0xa1a2a3a4
>>> struct.unpack('4B', struct.pack('>I', x))
(161, 162, 163, 164)
「包裝」與格式'>I'
使得x
到大端順序的4字節的字符串,然後可以立即「解包」成四個無符號字節大小值,格式爲'4B'
。十分簡單。
+1不知道。 – 2010-01-26 22:33:44
我知道這是一箇舊帖子,但對於任何正在看這個的人 - 這在Python 3中不起作用。TypeError:'int'不支持緩衝接口 – ThatAintWorking 2016-04-01 21:25:14
@ThatAintWorking Pardon?如果將一個整數傳遞給'struct,那麼只會在這裏引發TypeError。解壓()'(因此,你知道錯誤文本提到一個int ...),但是如果你注意到,這個答案不會發生,因爲struct.pack()總是返回一個字符串...所以它可以像預期的那樣100%工作,即使在Python 3中也是如此。我假設你接受了嵌套包,並試圖將一個整數直接傳遞給'struct.unpack()'而不會注意到? – 2017-12-22 06:40:30
有點晚,但我平時做這樣的事情:
hexnum = 0xa1a2a3a4
bytes = []
while (hexnum > 0):
bytes.insert(0, hexnum & 0xff)
hexnum >>= 8
不知道但如果它的效率更高,然後解壓縮與否(可能不是由於使用list.insert的())。
- 1. C#打破了從單獨的類/方法循環
- 2. 打破字符數組成字
- 3. 將1字節值和3字節值打包成單個32位結構
- 4. Mustache.js:爲什麼它打破串入的單獨字符
- 5. 在TCL中將大十六進制數字拆分成32位數字列表
- 6. CSV打破了值非分隔符
- 7. 分裂int值成獨立的數字
- 8. 32位寄存器將64位分成兩個32位寄存器
- 9. 打破數據成組
- 10. 打破了熱圖
- 11. 打破了循環
- 12. 如何使用Python將123456789分成單獨的數字?
- 13. XOR高32位,低32位,64位數
- 14. 打破分頁頁數
- 15. 獨立的32位彙編程序
- 16. NSLineBreakByWordWrapping打破了哪些字符?
- 17. 從32位8位比較中形成32位漢明字符串
- 18. `nth`打破了大熊貓的分類數據幀
- 19. 谷歌自動完成分割成單獨的字段
- 20. 打破單頁成多個文件
- 21. 打破一個字符串分解成模式
- 22. 打破一個字符串分割成詞序列
- 23. 4個有符號的字節打包成一個32位無符號的
- 24. 如何在JavaScript中將整數分隔成數組中的單獨數字?
- 25. 將列中的數字拆分爲單獨列中的數字
- 26. 如何強制Win7的IE-8 32位,並不打破WinXP的IE-7?
- 27. 單獨分隔的Excel數據分成2列
- 28. Icepick被打破了嗎?
- 29. WPF:Select TreeViewItem打破了根級
- 30. 排序表打破了TableRowListener?
請解釋一下你認爲Python「32位變量」是什麼。如果你假設它的值是無符號的,那就這麼說吧。如果不是,請解釋你想要的結果。 – 2010-01-26 13:39:31
我想它是無符號的,因爲沒有任何值的原因是否定的。 我的意思是a1,a2就像是一個大變量/字符串事物中的索引。我應該把x1x2x3x4,但這同樣適用。即時嘗試寫入CAST128,並在其中的一部分,臨時字節存儲在x1x2x3 ... x16,z1z2 ... z16。我將如何在一次4操作並更新它們? – calccrypto 2010-01-26 14:29:13