好了,因为其他人都给予可怕的答案,我要一步
- 你不应该这样做。
- 你不应该这样做。
- 一个整数和一个字符数组最终是一样的东西:字节。您可以用相同的方式访问这些值。
- 大多数数字表示限制在8个字节(64位)。您正在查看8 MB,即最大整数表示的100万次。你不应该这样做。真。
- 你不应该这样做。你的号码将是一个自定义的,巨大的数字类型,将在引擎盖下相同。
- 如果你真的想要做到这一点,尽管以上所有原因,这里是如何...
代码
def lshift(a, b):
# bitwise left shift 8
return (a << (8 * b))
def string_to_int(data):
sum_ = 0
r = range(len(data)-1, -1, -1)
for a, b in zip(bytearray(data), r):
sum_ += lshift(a, b)
return sum_;
不这样做
说明
人物基本上字节:他们可以以不同的方式进行编码,但最终你可以把它们在一个给定的编码中作为一个字节序列。为了将它们转换为数字,我们可以将它们左移8位,以获得它们在序列中的位置,从而创建唯一的数字。 r
,范围值,是相反顺序的位置:第4个元素需要向左走24个字节(3 * 8)等。
获得范围并将我们的数据转换为8位整数后,我们可以然后转换数据并拿出总和,给我们我们唯一的标识符。它与原始数字的字节顺序(或反向字节顺序)相同,但只是“作为一个数字”。这完全是徒劳的。不要这样做。
性能
任何性能是要由你创造没有正当理由的相同目标,但这个解决方案是体面高性能的事实所超越。
1,000个元素需要〜486微秒,10,000个元素需要〜20.5 ms,而100,000个元素需要约1.5秒。它会工作,但你不应该这样做。这意味着它被缩放为O(n ** 2),这可能是由于每次整数大小变大时重新分配数据的内存开销。这可能需要大约4小时才能处理所有8e6元素(14365秒,计算出的低阶数据为ax**2+bx+c
)。请记住,这是为了获得与原始数据相同的字节表示。
无用
记住,有〜1e78到1e82原子在整个宇宙中,目前的估计。这是〜2^275。你的值将能够代表2^71426504,或者大约260000倍,你需要表示宇宙中的每个原子。你不需要这样的号码。你永远不会会。
请注意,此代码工作正常,太慢了 –
我严重质疑为什么你需要一个约8 MB的精度的数字。最终,一个字符串和一个数字都是字节。一个字符串是你想要的数据类型。 –
你使用Python 3还是Python 2?你没有使用*我假设? –