所以我尝试使用以下方法将字符串转换为二进制文件,然后对二进制文件进行异或
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 0b11 00101 0b1100101'
这显然不是一个(单个)有效的以 2 为基数的整数。
关于python - 将字符串转换为二进制,然后异或二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55034041/