【问题标题】:Python Convert ASCII characters to bytes [duplicate]Python将ASCII字符转换为字节[重复]
【发布时间】:2017-12-25 17:38:40
【问题描述】:

我想将一些输入的 ASCII 字符转换为字节。例如从“a”到 01100001。
我已经阅读了this 之类的答案。但有时它会给出 0b10000110 之类的 9 位数值。我不确定这是一个错误还是它应该是这样工作的。 我做了这样的事情:

text = list(input("text: "))

for character in text:
    if character == ' ':
        byt = '00000000'
    else:
        byt = bin(ord(character))
    byt = byt.replace('b', '') #delete the 'b' in the output
    if len(byt) != 8:
        byt = '0' + byt
    print(byt)

它适用于普通字符。但是当我输入奇怪的字符时:'B
它的输出很奇怪:

001110
00100111
0010000000
01000010

我对 Python 不是很熟悉,所以我不知道是否可以编写函数或其他方法来做到这一点。
我正在使用 Python 3.6
非常感谢

【问题讨论】:

  • 你不想要字节,你想要二进制表示。仅由 0 和 1 个字符组成的字符串。同理"42"不是整数,它是数字的字符串表示形式。
  • 二进制表示就是我的意思。谢谢
  • format(ord(character), '08b') 会产生一个 8 字符的二进制表示。

标签: python python-3.x


【解决方案1】:

您正在寻找的见解是:

>>> '{:08b}'.format(121)
'01111001'
>>> '{:08b}'.format(7)
'00000111'

更新

正如 Martijn Pieters 所建议的,内置的 format 函数要优越得多:

>>> format(121, '08b')
'01111001'
>>> format(7, '08b')
'00000111'

更新 2

刚刚意识到这个问题被标记为重复。 Pieters 给出了格式答案here,并详细解释了它的工作原理。

【讨论】:

  • 不要使用str.format(),您可以使用format() function。为什么要增加解析开销? format(121, '08b') 产生相同的输出,而 Python 不必找到占位符并拉出格式化指令。您只有 一个 占位符,该模板字符串中没有其他文本。
  • 我怎么不知道这个内置函数?我以为我都认识他们。哇,谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多