字符串Python3.7上的位操作

2024-05-16 19:58:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的十六进制数字符串,我想对它执行一些位操作。我试图从中提取不同的字节,然后应用位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就会抱怨它不能对字符串执行|或{}。在


Tags: or方法字符串data字节bytes整数byte
2条回答

正如您所提到的,问题是十六进制数字的字符串更易读,并且适合于切片和至少一些移位操作,但不支持按位操作。另一方面,整数支持按位运算,但不支持切片。最接近您需要的可能是创建一个实现这两个特性的自定义类(在需要时进行转换)。这不会使您避免实现(和执行)更复杂的代码,但应用程序的其余部分可能更可读,因为转换是“隐藏”的。在

这个怎么样:

data = "0x4700ff1de05ca7686c2b43f5e37e6dafd388761c36900ab37"
size = (len(data)-2)//2
data_bytes = int(data,16).to_bytes(size,byteorder='big')

现在您可以执行以下操作:

^{pr2}$

相关问题 更多 >