Python:字符串中的异或十六进制值

标签 python string xor

我是 python 新手,我(也许)有一个愚蠢的问题。

我必须对两个值进行异或。目前我的值(value)观是这样的:

v1=

<class 'str'>
2dbdd2157b5a10ba61838a462fc7754f7cb712d6

v2=

<class 'str'>
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8

但问题是,我需要对实际的十六进制值进行异或,而不是字符串中给定字符的 ascii 值。

例如:

第一个字符串中的第一个字节是s1 = 2d,第二个字符串中的第一个字节是s2 = 5b

def sxor(s1,s2):
    return ''.join(chr(ord(a) ^ ord(b)) for a,b in zip(s1,s2))

这不起作用,因为它返回每个字符的 ASCII 值(然后对它们进行异或),这显然与实际的十六进制值不同。

最佳答案

您的错误是将字符转换为其 ASCII 代码点,而不是整数值。

您可以使用 int() 转换它们和 format()相反:

return ''.join(format(int(a, 16) ^ int(b, 16), 'x') for a,b in zip(s1,s2))

int(string, 16) 将输入字符串解释为十六进制值。 format(integer, 'x') 输出给定整数的十六进制字符串。

您可以在不使用 zip() 的情况下完成此操作,只需将整个字符串作为一个大整数即可:

return '{1:0{0}x}'.format(len(s1), int(s1, 16) ^ int(s2, 16))

为了确保前导 0 字符不会丢失,上面使用 str.format() 将结果整数格式化为正确长度的零填充十六进制。

关于Python:字符串中的异或十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46646292/

相关文章:

java - XOR 字节数组的成本似乎非常低,低于 arraycopy

Python 相当于 sum() 使用 xor()

python - 在 PySide 中创建跑马灯效果

python - 使用不同类型的单单元阵列清理数据框列

python - 在python中用一个替换多次出现的任何特殊字符

linux - 用于从文件中搜索字符串并显示每小时实例数的 Shell 脚本

regex - 排他或正则表达式

javascript - 将 ajax 响应传递给 django 模板

Python:检查两个列表之间字符串的部分匹配

c++ - 字符串未正确打印/初始化