首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python获取大十六进制数中的特定字节

Python获取大十六进制数中的特定字节
EN

Stack Overflow用户
提问于 2018-08-04 02:04:06
回答 1查看 4.1K关注 0票数 0

假设我有一个很大的十六进制数,0x1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF

我想轻松地从这个十六进制数中获得字节10-20,我该如何实现呢?我知道我可以将位右移的数据减少10*8倍,但我仍然将有效字节留在我的左十六进制数中。

EN

回答 1

Stack Overflow用户

发布于 2018-08-04 07:20:10

我觉得比特掩码方法是获取所需比特的一种更直接的方法,而不是处理字符串和子字符串。在您的评论中,您提到位掩码将非常大,这是真的,但这不是一个程序的问题。

我有一个示例函数,它可以根据您想要从数据中获取的字节数为您制作掩码。然后,您只需将该掩码与右移的值进行AND,即可获得所需的值。

假设您想从字节索引2开始获取4个字节的数据:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51677943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档