Python 中十六进制数的按位异或
本文的主要目的是演示如何在 Python 的十六进制数字系统中处理 XOR 数字。
Python 中十六进制数的按位异或
XOR 是按位运算符,意思是异或。 它执行逻辑运算,如果两个输入(0 或 1)相同,则返回 1;否则返回 1。 否则,如果输入数字不同(如 0 和 1 或 1 和 0),则输出将为 0。
XOR 通常用在用于压缩、加密、图形或任何形式的通信的应用程序中。 作为按位逻辑运算符的一部分,XOR 允许更高的精度并需要更少的资源,从而使代码更快、更高效。
使用 ^ 运算符,可以很容易地对十进制数进行异或运算。 最初在字符串中或字符串的一部分的数字呢?
考虑以下代码:
def strxor(a, b):
if len(a) > len(b):
return "".join(["%s" % (ord(x) ^ ord(y)) for (x, y) in zip(a[:len(b)], b)])
else:
return "".join(["%s" % (ord(x) ^ ord(y)) for (x, y) in zip(a, b[:len(a)])])
if __name__ == '__main__':
print("1C2 ^ ABC = ", strxor("1C2", "ABC"))
print("2FF ^ 78B = ", strxor("2FF", "78B"))
print("29A ^ 90C = ", strxor("29A", "90C"))
print("10C ^ 24B = ", strxor("10C", "24B"))
print("BAD ^ 432 = ", strxor("BAD", "432"))
print("54F ^ 123 = ", strxor("54F", "123"))
这给出了下面的输出:
1C2 ^ ABC = 1121113
2FF ^ 78B = 51264
29A ^ 90C = 1192
10C ^ 24B = 341
BAD ^ 432 = 118114118
54F ^ 123 = 46117
让我们验证我们的解决方案:
if __name__ == '__main__':
print("1C2 ^ 0xABC = ", 0x1C2 ^ 0xABC)
print("2FF ^ 0x78B = ", 0x2FF ^ 0x78B)
print("29A ^ 0x90C = ", 0x29A ^ 0x90C)
print("10C ^ 0x24B = ", 0x10C ^ 0x24B)
print("BAD ^ 0x432 = ", 0xBAD ^ 0x432)
print("54F ^ 0x123 = ", 0x54F ^ 0x123)
这给出了以下输出:
1C2 ^ 0xABC = 2942
2FF ^ 0x78B = 1396
29A ^ 0x90C = 2966
10C ^ 0x24B = 839
BAD ^ 0x432 = 3999
54F ^ 0x123 = 1132
从上面的代码可以看出,我们创建了一个名为 strxor 的新方法,它有两个名为 a 和 b 的参数,分别对应传递给该函数的两个字符串。 该方法的目的是获取两个字符串,对它们进行异或,然后返回结果(也是一个字符串)。
验证方案后,发现结果和预期的不一样。 也就是说,实现的函数strxor存在逻辑错误。
可以通过多种方式解决此问题。 其中一些定义如下:
解决方案 1
def strxor(a, b):
if len(a) > len(b):
res = "".join(["%x" % (int(x,16) ^ int(y,16)) for (x, y) in zip(a[:len(b)], b)])
return int("0x" + res, 0)
else:
res = "".join(["%x" % (int(x,16) ^ int(y,16)) for (x, y) in zip(a, b[:len(a)])])
return int("0x" + res, 0)
这给出了以下输出:
1C2 ^ ABC = 2942
2FF ^ 78B = 1396
29A ^ 90C = 2966
10C ^ 24B = 839
BAD ^ 432 = 3999
54F ^ 123 = 1132
在上述解决方案中,对原始函数进行了修复,以在检查代码中更改的内容时显示正确的输出,而不是使用 ord()
,它返回表示指定字符的 Unicode 代码的数字。
我们使用 int 参数是字符串之一和 16,指的是与十六进制对应的数字的基数。
方案二
def strxor(a, b):
if len(a) > len(b):
res = '%x' % (int(a[:len(b)],16)^int(b,16))
return int("0x" + res, 0)
else:
res = '%x' % (int(a,16)^int(b[:len(a)],16))
return int("0x" + res, 0)
这给出了以下输出:
1C2 ^ ABC = 2942
2FF ^ 78B = 1396
29A ^ 90C = 2966
10C ^ 24B = 839
BAD ^ 432 = 3999
54F ^ 123 = 1132
此方法不依赖 for
循环和 zip。 在运行时间和整体执行时间方面,它比同类产品快得多。
相关文章
在 Python 中将十六进制转换为 Base64
发布时间:2023/06/01 浏览次数:85 分类:Python
-
本篇文章将介绍在 Python 中将 hex 转换为 base64 的方法。使用 Python 中的 codecs 模块将 HEX 转换为 BASE64 Python 中的 codecs 模块提供了 encode() 和 decode() 方法来实现不同文本编码格式之间的转换。
Python 中的 Fama-Macbeth 回归
发布时间:2023/06/01 浏览次数:68 分类:Python
-
本篇文章介绍了 Fama-Macbeth 回归、其重要性及其实施。Fama-Macbeth 回归及其重要性 在资产定价理论中,我们使用风险因素来描述资产收益。
Python 逐步回归
发布时间:2023/06/01 浏览次数:75 分类:Python
-
本篇文章将讨论在 Python 中执行逐步回归的方法。Python 中的逐步回归 逐步回归是一种用于统计和机器学习的方法,用于选择特征子集来构建线性回归模型。
Python 错误 ValueError: Cannot Convert Float NaN to Integer
发布时间:2023/05/31 浏览次数:98 分类:Python
-
本篇文章将介绍如何修复 ValueError: cannot convert float NaN to integer 。使用 fillna() 方法修复python错误 ValueError: cannot convert float NaN to integer
修复 Python 错误TypeError: Missing 1 Required Positional Argument
发布时间:2023/05/31 浏览次数:75 分类:Python
-
本篇文章将讨论 Python 中的 TypeError: missing 1 required positional argument: 'self' 错误以及我们如何解决它。让我们讨论引发此错误的情况。不在 Python 中实例化对象
Python 语法错误 SyntaxError: Can't Assign to Literal Error
发布时间:2023/05/31 浏览次数:129 分类:Python
-
这个简短的文章将讨论 SyntaxError: Can't assign to literal 错误在 Python 中。Python 错误 SyntaxError: Can't assign to literal。当我们尝试为文字赋值时会遇到此语法错误。
Python 错误 OverflowError: Python Int Too Large to Convert to C Long
发布时间:2023/05/31 浏览次数:144 分类:Python
-
本篇文章将介绍 Python 中的 OverflowError: python int too large to convert to c long 错误。当算术结果超出数据类型的给定限制时,Python 中会引发 OverflowError。
Python 错误 UnicodeDecodeError: ASCII Codec Can't Decode Byte in Position: Ordi
发布时间:2023/05/31 浏览次数:90 分类:Python
-
在本文中,我们将学习如何解决在代码执行期间发生的 UnicodeDecodeError。 我们将查看导致此错误的不同原因。
Python 错误 NameError: Name Execfile Is Not Defined
发布时间:2023/05/31 浏览次数:81 分类:Python
-
本篇文章介绍了 NameError: name execfile is not defined、其原因以及在 Python 3 中解决此错误的方法。