Python base64.b32hexencode 没有创建预期的结果

问题描述 投票:0回答:1

我希望代码返回

TPLIG0
作为 10 亿 (1.000.000.000) 的 base32 十六进制扩展值。相反,我得到
7EDCK00=
.

这是我的代码:

import base64
num = 1000000000
needed_bytes = num.to_bytes((num.bit_length() + 7) // 8, byteorder='big')
result = base64.b32hexencode(needed_bytes).decode('utf-8')
print(result)

我试过

b32hexencode
b32encode
,以及
byteorder='little'
byteorder='big'
,但我无法重现预期的结果。

如果我用硬编码数字替换除法:

num.to_bytes(5, byteorder='big')
我可以得到近似结果:
00TPLIG0
。但是这里发生了什么??

我正在使用

python 3.10.7
。在 Windows 上和
3.11.0
在 Ubuntu 上(两者都创建相同的输出)。

python-3.x base64 hex base32
1个回答
0
投票

您实际上是在尝试将十进制基数转换为 base32。我不认为

base64
是为这样的用例而设计的。

从一个基地转换到另一个基地已经包含在其他 SO 答案中(例如参见here)。在您的情况下,您可以实现以下功能:

def base10to32(n,symbols="0123456789ABCDEFGHIJKLMNOPQRSTUV"):
    return (base10to32(n//32)+symbols[n%32]).lstrip("0") if n>0 else "0"

base10to32(1000000000)

或者如果您更喜欢使用现有模块,

numpy
可以处理这种类型的转换:

import numpy as np
np.base_repr(1000000000, 32)

输出:

TPLIG0
© www.soinside.com 2019 - 2024. All rights reserved.