所以我试图通过使用以下方法将字符串转换为二进制,然后将异或
def string_to_binary(s):
return ' '.join(map(bin,bytearray(s,encoding='utf-8')))
def xor_bin(a,b):
return int(a,2) ^ int(b,2)
当我尝试运行
xor_bin
函数时,出现以下错误:Exception has occurred: exceptions.ValueError
invalid literal for int() with base 2: '0b1100010 0b1111001 0b1100101 0b1100101 0b1100101'
我看不到这里有什么问题。
最佳答案
bin
在这里很糟糕;它不会填充到八位数字(因此,每当高位为0
时,您将丢失数据对齐方式,并将该损失左侧的所有位误解为幅度小于应有的幅度),并且添加了一个不需要的0b
前缀。 str.format
可以通过零填充并省略0b
前缀来解决这两个问题(我还删除了连接符字符串中的空格,因为您不希望在结果中留空格):
def string_to_binary(s):
return ''.join(map('{:08b}'.format, bytearray(s, encoding='utf-8')))
这样,
string_to_binary('byeee')
将为您提供所需的'0110001001111001011001010110010101100101'
,而'0b1100010 0b1111001 0b1100101 0b1100101 0b1100101'
显然不是有效的(单)基数2。