我已经在一个问题上停留了好几天了。我已经尝试了很多方法,包括将十六进制转换为 dec,然后再次转换回来,但我没有运气。
对于那些感兴趣的人,我正在为正在查看比特币120拼图的人创建软件。 https://privatekeys.pw/puzzles/bitcoin-puzzle-tx
我拥有的范围是
Start_Range = 0x800000000000000000000000000000
End_Range = 0xffffffffffffffffffffffffffffff
Numpy表示它们太大,无法作为一个整体分开。
我想要的结果可能是 500,000 - 1,000,000 个相等的子范围,介于多维列表中的这两个十六进制范围之间。
即省略 0x
[[80000, 800FF], ....]
感谢您的任何帮助,我已经为此卡了将近一周。
你的字符串文字确实太长了,无法将它们隐藏为整数。
但是您可以将它们"拆分"为两部分:
- "下"部分,最后 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
当然,每个边框的"true"值可以乘以每个 值2 ** 32
,但您实际上不需要它们(表示为整数)。
还将源值拆分为"下部"和"上部",并决定 它完全基于值的上半部分去哪个"目标子范围" 有问题的。
编辑
一个小修正:最后一个子范围的上限实际上是x2(之前计算)。