我已經被一個問題困住了好幾天。我嘗試了很多事情,包括將十六進制轉換為十進制,然后再次轉換回來,但我沒有運氣。
對于那些感興趣的人,我正在為正在研究 Bitcoin 120 Puzzle 的人創建軟體。https://privatekeys.pw/puzzles/bitcoin-puzzle-tx
我擁有的范圍是
Start_Range = 0x800000000000000000000000000000
End_Range = 0xffffffffffffffffffffffffffffff
Numpy 表示它們太大而無法拆分為整個范圍。
我想要的結果可能是多維串列中這兩個十六進制范圍之間的 500,000 - 1,000,000 個相等的子范圍。
即省略 0x
[[80000, 800FF], ....]
感謝您的幫助,我已經被困在這個問題上將近一個星期了。
uj5u.com熱心網友回復:
您的字串文字確實太長而無法將它們轉換為整數。
但是您可以將它們“拆分”為兩部分:
- “下”部分,最后 16 位十六進制數字,
- “上”部分,前 14 個十六進制數字。
實際上,您只對兩個“上部”感興趣,因此將范圍邊界設定為包含十六進制數字的字串,而沒有初始的“0x”:
Start_Range = '800000000000000000000000000000'
End_Range = 'ffffffffffffffffffffffffffffff'
然后將每個邊框的兩個“上部”設定為:
x1 = int(Start_Range[0:14], 16)
x2 = int(End_Range[0:14], 16)
這次是整數。
還要計算這個范圍的大小:
siz = x2 - x1
當您列印它們時,您將獲得:
36028797018963968 72057594037927935 36028797018963967
為簡單起見,假設您要將源范圍拆分為 10個子范圍,因此定義:
n = 10
并生成子范圍邊界表,運行:
tbl = np.arange(x1, x2, siz // n)
您可以使用以下代碼列印每個子范圍及其大小的邊框:
t1 = tbl[0]
for i in range(1, len(tbl)):
t2 = tbl[i]
print(f'{i:3}: {t1}, {t2}, {t2 - t1}')
t1 = t2
得到:
1: 36028797018963968, 39631676720860364, 3602879701896396
2: 39631676720860364, 43234556422756760, 3602879701896396
3: 43234556422756760, 46837436124653156, 3602879701896396
4: 46837436124653156, 50440315826549552, 3602879701896396
5: 50440315826549552, 54043195528445948, 3602879701896396
6: 54043195528445948, 57646075230342344, 3602879701896396
7: 57646075230342344, 61248954932238740, 3602879701896396
8: 61248954932238740, 64851834634135136, 3602879701896396
9: 64851834634135136, 68454714336031532, 3602879701896396
10: 68454714336031532, 72057594037927928, 3602879701896396
當然,可以通過將每個值乘以 來計算每個邊界的“真”值2 ** 32,但實際上您不需要它們(表示為整數)。
還將您的源值拆分為“較低”和“較高”部分,并僅根據相關值的較高部分決定它去往哪個“目標子范圍”。
編輯
一個小的修正:最后一個子范圍的上限實際上是 x2(之前計算過)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/334219.html
上一篇:pip卸載不會完全洗掉包
