您的字符串文字确实太长,无法将它们转换为整数。
但您可以将它们“拆分”为 2 部分:
- “低”部分,最后 16 位十六进制数字,
- “上”部分,前 14 个十六进制数字。
实际上,您只对两个“上部”感兴趣,因此请设置您的
范围边界为 strings 包含十六进制数字,没有初始
“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(之前计算的)。