为了账号安全,请及时绑定邮箱和手机立即绑定

在 GO 中得到错误的 Base64 编码结果

在 GO 中得到错误的 Base64 编码结果

Go
茅侃侃 2022-11-15 17:08:47
我有以下通过将 5 个值(由名称、数字和日期字段组成)转换为 TLV 创建的十六进制数据0115426f627320426173656d656e74205265636f726473020f3130303032353930363730303030330314323032322d30342d32355431353a33303a30305a040a323130303130302e393905093331353031352e3135此十六进制数据需要进一步编码为 Base64。我为此写了下面的代码func TLVsToBase64(v string) string { // v - the TLV in hex format        encodedTLV := b64.StdEncoding.EncodeToString([]byte(v))    return encodedTLV}上述十六进制数据的输出(错误)如下:MDExNTQyNmY2MjczMjA0MjYxNzM2NTZkNjU2ZTc0MjA1MjY1NjM2ZjcyNjQ3MzAyMGYzMTMwMzAzMDMyMzUzOTMwMzYzNzMwMzAzMDMwMzMwMzE0MzIzMDMyMzIyZDMwMzQyZDMyMzU1NDMxMzUzYTMzMzAzYTMwMzA1YTA0MGEzMjMxMzAzMDMxMzAzMDJlMzkzOTA1MDkzMzMxMzUzMDMxMzUyZTMxMzU=所需的输出是:ARVCb2JzIEJhc2VtZW50IFJlY29yZHMCDzEwMDAyNTkwNjcwMDAwMwMUMjAyMi0wNC0yNVQxNTozMDowMFoECjIxMDAxMDAuOTkFCTMxNTAxNS4xNQ==我是 Go 新手,所以请帮我解决问题。我可能错过了什么
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

您的输入是某些数据的十六进制表示。并且您的预期输出不是十六进制表示的 UTF-8 数据的 Base64 编码,而是十六进制编码表示的数据(字节),因此首先解码字节,例如使用hex.DecodeString():


func TLVsToBase64(v string) (string, error) { // v - the TLV in hex format

    data, err := hex.DecodeString(v)

    if err != nil {

        return "", err

    }


    encodedTLV := base64.StdEncoding.EncodeToString(data)

    return encodedTLV, nil

}

测试它:


s := "0115426f627320426173656d656e74205265636f726473020f3130303032353930363730303030330314323032322d30342d32355431353a33303a30305a040a323130303130302e393905093331353031352e3135"

fmt.Println(TLVsToBase64(s))

输出是你所期望的(在Go Playground上试试):


ARVCb2JzIEJhc2VtZW50IFJlY29yZHMCDzEwMDAyNTkwNjcwMDAwMwMUMjAyMi0wNC0yNVQxNTozMDowMFoECjIxMDAxMDAuOTkFCTMxNTAxNS4xNQ== <nil>



查看完整回答
反对 回复 2022-11-15
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信