Python 用二进制串接数字

Python 用二进制串接数字,python,Python,在Python中以二进制形式转换数字时,得到的结果如下: b = bin(77) print(b) # 0b1001101 ch = 'Man ' list_ = [ord(x) for x in ch] # [77, 97, 110, 32] binary_repr = ''.join(bin(x) for x in list_) # 0b10011010b11000010b11011100b100000 # When it should be

在Python中以二进制形式转换数字时,得到的结果如下:

b = bin(77)
print(b)  # 0b1001101
ch = 'Man '
list_ = [ord(x) for x in ch]  # [77, 97, 110, 32]
binary_repr = ''.join(bin(x) for x in list_)  # 0b10011010b11000010b11011100b100000
# When it should be                                01001101011000010110111000100000
当我期待
01001101
时。我猜
b
是为了让Python知道这是一个二进制数,而不是某个整数。这在Python中是可以的,但是如果你想与外界交流,这里认为什么是安全的做法呢?这可能是一个愚蠢的例子,但例如在线转换器无法识别上述二进制代码

简单地删除
b
就可以了吗?因为我似乎在尝试编码二进制数串联的Ascii85编码器/解码器时遇到了问题。你可以看看这个例子

我的代码是:此案例生成以下内容:

b = bin(77)
print(b)  # 0b1001101
ch = 'Man '
list_ = [ord(x) for x in ch]  # [77, 97, 110, 32]
binary_repr = ''.join(bin(x) for x in list_)  # 0b10011010b11000010b11011100b100000
# When it should be                                01001101011000010110111000100000
请注意,简单地用零替换
b
并不能完全解决这个问题。这可能是个愚蠢的错误,但有人能帮我澄清一下吗

>>> format(b, '08b') 
其中b是数字,“08b”是表示数字的位数,如果参数是#08b而不是08b,则数字前面的0b

在以后的操作中使用格式,你应该很好

没有

str(b)[2:] 
做这个工作

但你最好这样做:

"{0:b}".format(77)

不,修剪前两个字符就可以了。@ukaszRogalski但是修剪前两个字符会得到7位数字。这怎么可能?@Ev.Kounis
bin
不关心字节,它只生成代表数字的最短位字符串<代码>垃圾箱(1)->0b1@PatrickHaugh我明白了。谢谢大家!或者:
print“{0:b}”。format(77)
@alfasin我也更喜欢这种方式。你是对的,我忘了这一点,只是回答了我脑海中出现的第一个解决方案,我已经很久没有用过phyton tbh了