【发布时间】:2020-08-31 02:56:13
【问题描述】:
Python 提供了在将整数转换为字节表示时指定字节的长度,即
base64.b64encode((128).to_bytes(1,'little'))
-> b'gA==
在 Go 中尝试相同的操作时,使用 binary/encode 包,我可以从 uint16 开始,它会给出这样的结果:
buf := make([]byte, 4)
binary.LittleEndian.PutUint16(buf, uint16(128))
encoded := base64.URLEncoding.EncodeToString(buf)
-> gAAAAA==
或使用PutUvarint
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, num)
b := buf[:n]
encoded := base64.URLEncoding.EncodeToString(b)
-> gAE==
由于编码方式允许在事先不知道长度的情况下进行解码,因此最终得到了更长的编码,这是我不感兴趣的。
那么我可以通过什么方式将 Python 代码翻译成 Go?对于 1 个字节,我可以只使用 byte(num),最多使用 num = 255,但它上面是什么?我怎么从那里去?我想我也可以使用uint64 并截断
最终得到更长的编码
哪个最终得到更长的编码和填充字符?
【问题讨论】:
-
使用byte order方法名指定编码的长度:2:PutUint16、4:PutUint32、8:PutUint64。如问题所述,使用
byte(n)进行单字节编码。 -
@MuffinTop 我相信
PutUint16是 4 个字节而不是 2 个 -
uint16 是 16 位,2 个字节。
标签: python go encoding binary base64