gpt4 book ai didi

python - python中的十六进制到字符串格式转换

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:26 25 4
gpt4 key购买 nike

我曾经通过以下方式生成随机字符串(现在我已经切换到 this method )。

key = '%016x' % random.getrandbits(128)

以这种方式生成的 key 通常是 32 个字符的字符串,但一旦我得到 31 个字符。

这是我不明白的:为什么是 32 个字符,而不是 16 个?一个十六进制数字不占用一个字符来打印吗?

因此,如果我要求 %016x - 难道不应该期望有 16 个字符可能带有前导零吗?

为什么字符串长度并不总是相同?

测试用例

import random
import collections
stats = collections.defaultdict(int)
for i in range(1000000):
key = '%016x' % random.getrandbits(128)
length = len(key)
stats[length] += 1

for key in stats:
print key, ' ', stats[key]

打印:

32   937911
27 1
28 9
29 221
30 3735
31 58123

最佳答案

是的,但是您使用的格式不会截断——您生成 128 个随机位,这需要(通常)显示 32 个十六进制数字,%016 表示至少 16十六进制数字,但不只是丢弃显示所有 128 位数字所需的额外数字。如果这是您实际需要的,为什么不只生成 64 个随机位呢?随机生成器的工作更少,并且没有格式问题。

为了满足你的好奇心,长度偶尔是31位,因为16位中有1次前4位全为0;实际上在 256 中有 1 次所有前 8 位都是 0 所以你只会得到 30 位数字,等等。你只要求 16 位数字,所以格式将给出最少的数字 >= 16 并且不需要您没有要求的截断。

关于python - python中的十六进制到字符串格式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com