字符串的二进制表示

时间:2019-05-07 20:02:08

标签: python encoding

假设我在一个字符串中有一些ASCII字符,比如说s = ABC,我如何才能检索字符串形式的二进制表示形式?

在这种情况下

A = '01000001'
B = '01000010'
C = '01000011'

所以我想要类似make_binary('ABC')的东西返回'010000010100001001000011'

我知道我可以获取字符串的十六进制值。我知道我可以得到整数的二进制表示形式。我不知道是否有办法将所有这些部分绑在一起。

2 个答案:

答案 0 :(得分:4)

使用ord()函数来获取每个字符的整数编码。

def make_binary(s):
    return "".join([format(ord(c), '08b') for c in s])
print(make_binary("ABC"))

08b格式返回以8位开头为零的数字格式。

答案 1 :(得分:2)

我认为另一个答案是错误的。也许我误解了这个问题。

无论如何,我认为您要求的是“位”表示。二进制通常用于字节表示(.bin文件等)

字节表示形式是由编码给出的,因此您应该对字符串进行编码,然后将得到一个字节数组。这是您的二进制(以字节为单位)表示形式。

但是您似乎在问“位表示”。那是不同的(另一个答案,恕我直言是错误的)。您可以像其他答案一样将字节数组转换为位表示形式。注意:您正在转换字节。如果只显示一个字节的二进制表示形式,则对于127以上的任何字符,另一个答案将失败。

所以:

def make_binary(s):
    return "".join(format(c, '08b') for c in s.encode('utf-8'))

和测试(@Barmar上的哪个文件)。

>>> print(make_binary("ABC"))
010000010100001001000011
>>> print(make_binary("Á"))
1100001110000001