从Python中的int中提取位域

从Python中的int中提取位域,第1张

概述我有一个像0x5423的数字,我想提取4个值: a = 0x5 # 15 downto 12b = 0x42 # 11 downto 3c = 0x3 # 3 downto 2d = 0x00 # 1 downto 0 我发现模块bitstrings看起来很棒.不幸的是,由于未知原因,这些位从右侧开始编号. 这很糟糕,因为如果添加一些高位如0xA5423我的提取将不再起作用: f 我有一个像0x5423的数字,我想提取4个值:

a = 0x5   # 15 downto 12b = 0x42  # 11 downto 3c = 0x3   # 3 downto 2d = 0x00  # 1 downto 0

我发现模块bitstrings看起来很棒.不幸的是,由于未知原因,这些位从右侧开始编号.

这很糟糕,因为如果添加一些高位如0xA5423我的提取将不再起作用:

fIEld = bitstrings.BitArray('0x5423')a = fIEld[0:4].uintb = fIEld[4:12].uintc = fIEld[12:14].uintd = fIEld[14:16].uint

如何在没有复杂算术 *** 作的情况下正确提取我的位域,例如:

b = (a >> 4) & 0xFF

理想情况下我会:

b = fIEld.range(11,4)
解决方法 在传递给bitstring.BitArray之前,将字符串转换为0x ####格式:

>>> n = '0xA5423'>>> n = '0x{:04x}'.format(int(n,16) & 0xffff)  # => '0x5423'>>> fIEld = bitstring.BitArray(n)>>> fIEld[0:4].uint5>>> fIEld[4:12].uint  # 0x42 == 6666>>> fIEld[12:14].uint0>>> fIEld[14:16].uint3

更新另一个不依赖于bitstring的解决方案,并从左计数(根据OP):

将数字转换为二进制格式:

>>> n = '0xA5423'>>> n = format(int(n,16),'016b')[::-1]  # reversed>>> n'11000100001010100101'>>> int(n[0:2][::-1],2)  # need to reverse again to get proper value3>>> int(n[2:4][::-1],2)0>>> int(n[4:12][::-1],2)66>>> int(n[12:16][::-1],2)5
总结

以上是内存溢出为你收集整理的从Python中的int中提取位域全部内容,希望文章能够帮你解决从Python中的int中提取位域所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1197473.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存