登录
首页 >  Golang >  Go问答

在 GO 中获得错误的 Base64 编码输出

来源:stackoverflow

时间:2024-02-10 19:15:23 241浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在 GO 中获得错误的 Base64 编码输出》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我通过将 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 新手,所以请帮助我解决问题。我可能错过了一些东西


正确答案


您的输入是某些数据的十六进制表示形式。并且您的预期输出不是十六进制表示的 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== 

到这里,我们也就讲完了《在 GO 中获得错误的 Base64 编码输出》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>