1 回答
TA贡献1951条经验 获得超3个赞
你是base64编码4个二进制字节:
bs := make([]byte, 4) // `AAEAAQ==`
这将产生 6 ( 4*8/6) 个 base64 字符 - 加上==填充。
您想对三个二进制字节进行编码 - 这将产生 4 ( 3*8/6) 个 base64 字符。
bs := []byte{1, 0, 1}
fmt.Println(bs)
fmt.Println(base64.URLEncoding.EncodeToString(bs)) // `AQAB`
https://play.golang.org/p/gDviu06pftR
编辑
因此,您只需要较低的 3 个字节(如果使用 BigEndian,则在末尾)。
所以你可以使用你的原始代码:
bs := make([]byte, 4)
binary.BigEndian.PutUint32(bs, 65537)
bs = bs[1:] // drop most significant byte - leaving least-significant 3-bytes
fmt.Println(base64.URLEncoding.EncodeToString(bs)) // `AQAB`
或者,如果您查看binary.BigEndian.PutUint32的来源,您可以看到它如何从uint32- 中提取 4 个字节,并对 3 个字节执行相同操作:
bs := make([]byte, 3)
v := 65537
bs[0] = byte(v >> 16)
bs[1] = byte(v >> 8)
bs[2] = byte(v)
fmt.Println(base64.URLEncoding.EncodeToString(bs)) // `AQAB`
https://play.golang.org/p/xTNzZMeQWVx
- 1 回答
- 0 关注
- 176 浏览
添加回答
举报