【问题标题】:Converting a number to binary with a fixed length将数字转换为固定长度的二进制
【发布时间】:2011-03-16 05:11:41
【问题描述】:

假设我得到一个介于 1 和 127 之间的随机数。我将数字更改为二进制并使用以下代码从中删除 0b

key_one= int(raw_input("Enter key (0 <= key <= 127): "))

if key_one in range(128):
    bin_key_one=bin(key_one)[2:]
print bin_key_one
else:
    print "You have to enter key (0 <= key <= 127)"

现在我想通过在必要时用零填充开头来使其长度为 7 个字符。我想我需要使用 for 循环,但有人可以告诉我怎么做吗?

【问题讨论】:

  • if key_one in range(128) 可以简单地替换为 if 0 &lt;= key_one &lt;= 127(更通用,因为它很容易容纳远大于 127 的数字)。

标签: python for-loop


【解决方案1】:

不,你没有。

>>> '{0:07b}'.format(12)
'0001100'

【讨论】:

  • +1:这避免了转换为二进制,这在未来可能会改变。
  • 我有点震惊——我已经使用 Python 几年了,之前从未见过 str.format()。我一直在 Python 中使用 C 风格的格式化打印,碰巧不支持二进制。
  • 现在是f'{12:07b}'
  • 怎么把7换成一些变量length
  • f'{num:0{num_bits}b}'。编辑:添加为这个问题的答案
【解决方案2】:

所以碰巧Python有一个字符串方法.zfill()

>>> '1'.zfill(7)
'0000001'
>>> '10010'.zfill(7)
'0010010'

【讨论】:

    【解决方案3】:

    使用 Python 3.6 的新 f-strings,您现在可以:

    key_one = int(input("Enter key (0 <= key <= 127): "))
    
    if key_one in range(128):
        bin_key_one = f'{key_one:07b}'
        print(bin_key_one)
    else:
        print("You have to enter key (0 <= key <= 127)")
    

    【讨论】:

    • 很好的解决方案。此解决方案的零前缀填充:print(f'{key_one:b}'.zfill(20)) 其中key_one 是您希望以二进制形式打印的 base10 数字,20 是最大零前缀长度。
    【解决方案4】:

    如果你想要可变长度:

    >>> n = 12
    >>> l = 7
    >>> bin(n)[2:].zfill(l)
    '0001100'
    

    【讨论】:

      【解决方案5】:

      曾经在我的项目中,我需要将一个整数转换为具有可变长度二进制字符串的二进制,所以我做到了

      num_bits = 12
      num = 4
      f'{num:0{num_bits}b}'
      

      输出
      000000000100

      【讨论】:

        【解决方案6】:

        如果您想灵活地将字符用作填充,而不仅仅是0,您也可以使用str.rjust

        >>> s = '111'
        >>> s.rjust(8, '0')
        '00000111'
        >>> s.rjust(8, 'x')
        'xxxxx111'
        

        【讨论】:

          【解决方案7】:

          试试这个:

          for i in range(1, 127):
          '0'*(7-len(bin(i)[2:]))+bin(i)[2:]
          

          【讨论】:

          • 内置的zfill() 正是这样做的……
          猜你喜欢
          • 2014-12-15
          • 1970-01-01
          • 2010-10-12
          • 1970-01-01
          • 2017-06-23
          • 1970-01-01
          • 2019-02-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多