我们如何 select 来自 python 中给定十六进制范围的随机十六进制值
How can we select a random hex value from a given hex range in python
如果我有一个十六进制范围 0x2080000000-0x217fffffff
,如果我需要 select 这个范围内的随机十六进制数或多个十六进制数,我该如何使用 python?
使用 random
模块中的 randint:
from random import randint
x = randint(0x2080000000, 0x217fffffff)
print(f"Decimal : {x}\n"
f"Hexadecimal: {hex(x)}")
上面在闭区间[0x2080000000, 0x217fffffff]
中抽取一个随机整数赋值给x
。然后它使用 built-in 函数 hex 获取整数 x
.
的十六进制表示形式(作为字符串)
示例输出
Decimal : 140929308832
Hexadecimal: 0x20d00a98a0
多个随机整数
如果需要在闭区间[0x2080000000, 0x217fffffff]
内不重复的多个随机整数,可以使用sample:
from random import sample
y = sample(range(0x2080000000, 0x2180000000), 10)
这 returns 一个 10 元素 list
的随机整数在上述闭区间没有重复。请注意使用 0x2180000000
而不是 0x217fffffff
因为 range(start, stop) 在 half-open 间隔 [start, stop)
中产生整数所以我们需要将 0x217fffffff
添加 1 所以range(0x2080000000, 0x2180000000)
在闭区间 [0x2080000000, 0x217fffffff]
.
中产生整数
如果不在意重复,可以使用
y = [randint(0x2080000000, 0x217fffffff) for i in range(10)]
创建一个 10 元素 list
的闭区间随机整数(可以重复)。
Cryptographically-secure随机数
如果需要cryptographically-secure随机性,先执行(docs)
from random import SystemRandom
rgen = SystemRandom()
然后,而不是
- 使用
randint()
,使用rgen.randint()
;
- 使用
sample()
,使用rgen.sample()
。
Python 将十六进制存储为一个 int,因此您可以使用 random.randint() 接收两个整数来定义范围和 returns 范围内的整数,然后您可以将生成的整数转换为十六进制。
from random import randint
my_hex = hex(randint(0x2080000000, 0x217fffffff))
print(my_hex)
打印随机十六进制:
0x20c30ad886
要选择几个十六进制数,请使用 random.choices,然后将生成的整数列表转换为十六进制列表
from random import choices
hex_list = [hex(i) for i in choices(range(0x2080000000, 0x217fffffff), k=5)]
print(hex_list)
十六进制数列表
['0x2146f52eae', '0x212b07a57c', '0x20afd61152', '0x20e5ad73b9', '0x21620afcb3']
如果我有一个十六进制范围 0x2080000000-0x217fffffff
,如果我需要 select 这个范围内的随机十六进制数或多个十六进制数,我该如何使用 python?
使用 random
模块中的 randint:
from random import randint
x = randint(0x2080000000, 0x217fffffff)
print(f"Decimal : {x}\n"
f"Hexadecimal: {hex(x)}")
上面在闭区间[0x2080000000, 0x217fffffff]
中抽取一个随机整数赋值给x
。然后它使用 built-in 函数 hex 获取整数 x
.
示例输出
Decimal : 140929308832
Hexadecimal: 0x20d00a98a0
多个随机整数
如果需要在闭区间[0x2080000000, 0x217fffffff]
内不重复的多个随机整数,可以使用sample:
from random import sample
y = sample(range(0x2080000000, 0x2180000000), 10)
这 returns 一个 10 元素 list
的随机整数在上述闭区间没有重复。请注意使用 0x2180000000
而不是 0x217fffffff
因为 range(start, stop) 在 half-open 间隔 [start, stop)
中产生整数所以我们需要将 0x217fffffff
添加 1 所以range(0x2080000000, 0x2180000000)
在闭区间 [0x2080000000, 0x217fffffff]
.
如果不在意重复,可以使用
y = [randint(0x2080000000, 0x217fffffff) for i in range(10)]
创建一个 10 元素 list
的闭区间随机整数(可以重复)。
Cryptographically-secure随机数
如果需要cryptographically-secure随机性,先执行(docs)
from random import SystemRandom
rgen = SystemRandom()
然后,而不是
- 使用
randint()
,使用rgen.randint()
; - 使用
sample()
,使用rgen.sample()
。
Python 将十六进制存储为一个 int,因此您可以使用 random.randint() 接收两个整数来定义范围和 returns 范围内的整数,然后您可以将生成的整数转换为十六进制。
from random import randint
my_hex = hex(randint(0x2080000000, 0x217fffffff))
print(my_hex)
打印随机十六进制:
0x20c30ad886
要选择几个十六进制数,请使用 random.choices,然后将生成的整数列表转换为十六进制列表
from random import choices
hex_list = [hex(i) for i in choices(range(0x2080000000, 0x217fffffff), k=5)]
print(hex_list)
十六进制数列表
['0x2146f52eae', '0x212b07a57c', '0x20afd61152', '0x20e5ad73b9', '0x21620afcb3']