【发布时间】:2013-06-27 14:27:08
【问题描述】:
我已经在网上寻找答案,但他们似乎都没有以我的方式解决我的问题(我知道,我很挑剔:D)。
这里是交易:我使用字符串类型来存储两个十六进制数字,因为 python 中的默认整数类型对于我的目的来说不够长。比如这样:
S1 = "315c4eeaa8b5f8aaf9174145bf43e1784b8fa00dc71d885a804e5ee9fa40b16349c146fb778cdf2d3aff021dfff5b403b510d0d0455468aeb98622b137dae857553ccd8883a7bc37520e06e515d22c954eba5025b8cc57ee59418ce7dc6bc41556bdb36bbca3e8774301fbcaa3b83b220809560987815f65286764703de0f3d524400a19b159610b11ef3e"
S2 = "234c02ecbbfbafa3ed18510abd11fa724fcda2018a1a8342cf064bbde548b12b07df44ba7191d9606ef4081ffde5ad46a5069d9f7f543bedb9c861bf29c7e205132eda9382b0bc2c5c4b45f919cf3a9f1cb74151f6d551f4480c82b2cb24cc5b028aa76eb7b4ab24171ab3cdadb8356f"
关键是,这些应该是数字,但它们存储在一个字符串中。我想要做的是将这两个字符串视为数字,对两者执行按位异或,然后以类似的形式获得输出 - 存储在字符串中的十六进制数字。
我对编程比较陌生,甚至对 python 也比较陌生,所以我想不出一种方法来做到这一点。我不只是在寻找一个脚本,我还想了解它是如何工作的,所以请仔细解释一下,因为我是个菜鸟 :D。
【问题讨论】:
-
您不必担心整数大小。 Python 足够聪明,可以在必要时使用其大整数实现 (
long)。 -
在第一次尝试对整数进行异或运算后,您是否得出了 Python 无法处理大整数的结论?还是你只是假设?
-
调用
binascii.unhexlify()并应用http://stackoverflow.com/questions/2119761/simple-python-challenge-fastest-bitwise-xor-on-data-buffers 的任何解决方案,调用binascii.hexlify()以获取十六进制字符串。 -
我通过从 Internet 上阅读得出的结论 :D,有人遇到了类似的问题,他的东西不起作用,因为显然 python 在将其转换为整数类型时截断了他的数字,如该值太大而无法容纳。所以我盲目地相信了这一点,并没有费心去尝试:D。
-
您的字符串实际上占用的内存几乎是等效的 int/long 的两倍,python 允许 int/long 类型增长到最大可用内存。