【发布时间】:2019-04-21 16:37:58
【问题描述】:
我有一大串十六进制数字,我想对其执行一些按位运算。我试图从中提取不同的字节,然后应用按位 OR、AND、XOR 操作。不幸的是,我不知道一个简单的方法来做到这一点,所以每次我想执行按位运算时,我都会将十六进制转换为整数。这是一个简化的代码。
data = "0x4700ff1de05ca7686c2b43f5e37e6dafd388761c36900ab37"
hex_data = "0x" + data[20:32]
four_bytes = hex_data[:10]
fifth_byte = "0x" + hex_data[10:12]
lshift_fourb = hex(int(four_bytes, 16) << 1)
bitwise_or_res = hex(int(lshift_fourb, 16) | int(fifth_byte, 16))
是否有一种简单的方法可以省略来回转换为整数和十六进制的常量,以便执行相同的操作。我更喜欢使用十六进制或二进制,因为我需要从输入数据字符串中提取某些字节,而hex(int(hex_number, 16)) 似乎有点过于重复和乏味。如果我不将其转换为整数,Python 会抱怨它无法在字符串上执行 | 或 ^。
【问题讨论】:
-
将字符串转为整数once,然后在整数域做所有操作,最后只转回字符串once .
-
@mkrieger1 然而,整数不支持切片,因此计算 hex_data 和four_bytes 必须用模数计算。可能,但也很乏味
-
但我应该如何从整数中提取特定字节?
-
通过移位和屏蔽。
-
您还可以编写一些辅助函数来分解重复的内容。
标签: python python-3.x bit-manipulation bitwise-operators