Python 用二进制串接数字
在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
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了