所以我试图通过使用以下方法将字符串转换为二进制,然后将异或

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。

08-04 00:09