好了,因爲其他人都給予可怕的答案,我要一步
- 你不應該這樣做。
- 你不應該這樣做。
- 一個整數和一個字符數組最終是一樣的東西:字節。您可以用相同的方式訪問這些值。
- 大多數數字表示限制在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?你沒有使用*我假設? –