假设我有一个很大的十六进制数,0x1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF
我想轻松地从这个十六进制数中获得字节10-20,我该如何实现呢?我知道我可以将位右移的数据减少10*8倍,但我仍然将有效字节留在我的左十六进制数中。
发布于 2018-08-04 07:20:10
我觉得比特掩码方法是获取所需比特的一种更直接的方法,而不是处理字符串和子字符串。在您的评论中,您提到位掩码将非常大,这是真的,但这不是一个程序的问题。
我有一个示例函数,它可以根据您想要从数据中获取的字节数为您制作掩码。然后,您只需将该掩码与右移的值进行AND
,即可获得所需的值。
假设您想从字节索引2开始获取4个字节的数据:
def get_bytes(value, start, amount):
shifted_value = value >> (start * 8) # Multiply by 8 for how much to right shift
mask = make_mask(amount)
return shifted_value & mask
def make_mask(byte_amount):
if byte_amount > 0:
bin_string = '1' * (byte_amount * 8) # Create binary string mask
else:
bin_string = '0' # Make result 0
return int(bin_string, 2) # Return integer representation
value = 0x1234567890ABCDEF1234567890ABCDEF
result = get_bytes(value, 2, 4)
结果最终在得到的十进制整数中为1450741931
,这将转换为十六进制的0x567890ab
。
https://stackoverflow.com/questions/51677943
复制相似问题