【问题标题】:Python bin() and leading zerosPython bin() 和前导零
【发布时间】:2021-05-29 12:42:39
【问题描述】:

从 Python 3 开始,bin() 转换中排除了前导零。

我正在尝试操作一个值并重新排列位,以便我可以解码偏移量,但在转换后我失去了值的前导零。

不丢失前导零的最佳方法是什么?

代码如下:

bytefeed = 0x0229  # which becomes 0x2902

def decodebytes(bytefeed, negative = True):

    rearrangedbits = list()
    reversed_dat.extend([bytefeed[1], bytefeed[0]])
    reversed_datdec = int.from_bytes(reversed_dat, byteorder='big', signed=False)
    bitfield2 = list(bin(reversed_datdec)[2:])
    rearrangedbits += bitfield2[4:10]
    rearrangedbits += bitfield2[0:4]
    rearrangedbits += bitfield2[10:17]
    bitfieldec2 = int("".join(map(str, rearrangedbits)),2)
    decovaroffset = finaloffset - bitfieldec2

    print(bitfield2)
    return decovaroffset

bitfield2 的结果是:

['1', '0', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '1', '0']

应该是:

['0', '0', '1', '0', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '1', '0']

zfill() 在这里不是一个选项,因为如果变量没有前导零,填充将影响偏移量。

【问题讨论】:

  • “如果变量没有前导零,填充将影响偏移量”是什么意思?
  • 每次 bytefeed 以非前导 0 值更改时不会改变完整值吗? var 不是常量 .. 被定义为仅用于发布问题的常量

标签: python python-3.x bit-manipulation


【解决方案1】:

似乎zfill() 解决了列表的问题,因为我之前误解了用法..

所以

bitfield2 = list(bin(reversed_datdec)[2:])

应该是

bitfield2 = list(bin(reversed_datdec)[2:].zfill(16))

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2014-03-04
    • 2013-03-03
    相关资源
    最近更新 更多