python – 按地址范围切片十六进制字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 按地址范围切片十六进制字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1866字,纯文字阅读大概需要3分钟。
内容图文
![python – 按地址范围切片十六进制字符串](/upload/InfoBanner/zyjiaocheng/789/de38d7f867d64f4bbabd4152a9ea5137.jpg)
假设我有一个十六进制字符串:
EPC = '00000800031C1060EC9FBD3C00000000'
规范文档指定字符串表示的不同字段的地址范围.对于例如地址范围48h-53h(12位),代表’代理’字段.我知道(根据经验)这代表六角形EPC中的3个半字节“1C1”.
同样,我希望能够解码具有指定地址范围的其他字段,所以我的问题是:
如何使用规范中的地址范围信息从十六进制字符串EPC中提取它所代表的半字节?更具体地说,我正在寻找以下类型的功能:
def fun(addressrangeinhex,bits, hexstring):
# addressrangeinhex is 48h-53h in my example above
# hexstring is EPC string in my example above
# bits is 12 bits in my example above
return rangeofindexinhexstring
所以在我的例子中使用函数我应该得到(index = 10,index = 12).
解决方法:
该解决方案采用指定要使用规范中的字符串提取的位的方法.即:’48h-53h’.从中提取那些寄存器位的十六进制值也应该是一个字符串.此外,此函数可以获取不在半字节边界上的值.
码:
def get_sub_register_value(sub_reg_bits_addr, bit_string):
"""
Given a register address description string, and a register value
string, return the bits from the value described by the address
:param sub_reg_bits_addr: string of the form '48h-53h'
:param bit_string: register value string of the form,
'00000800031C1060EC9FBD3C00000000'
:return: returns string of sub register: eg
"""
start, end = (int(x[:-1], 16) for x in sub_reg_bits_addr.split('-'))
value = int(bit_string, 16)
mask = (1 << (end - start + 1)) - 1
return ("%x" % ((value >> start) & mask)).upper()
测试数据:
EPC = '00000800031C1060EC9FBD3C0000000'
agency = '48h-53h'
pattern = 'FEDCBA98765432109876543210'
assert get_sub_register_value(agency, EPC) == '1C1'
assert get_sub_register_value('0h-3h', pattern) == '0'
assert get_sub_register_value('1h-4h', pattern) == '8'
assert get_sub_register_value('5h-8h', pattern) == '0'
assert get_sub_register_value('5h-9h', pattern) == '10'
assert get_sub_register_value('4h-9h', pattern) == '21'
assert get_sub_register_value('3h-9h', pattern) == '42'
内容总结
以上是互联网集市为您收集整理的python – 按地址范围切片十六进制字符串全部内容,希望文章能够帮你解决python – 按地址范围切片十六进制字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。