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

如何使用 Go 和 Python 处理 YAML 中的十六进制值?

如何使用 Go 和 Python 处理 YAML 中的十六进制值?

大话西游666 2021-11-02 15:12:32
我有这个简单的以下程序:package mainimport (    "fmt"    yaml "gopkg.in/yaml.v2")type Test struct {    SomeStringWithQuotes string `yaml:"someStringWithQuotes"`    SomeString           string `yaml:"someString"`    SomeHexValue         string `yaml:"someHexValue"`}func main() {    t := Test{        SomeStringWithQuotes: "\"Hello World\"",        SomeString:           "Hello World",        SomeHexValue:         "0xDef9C64256DeE61ebf5B212238df11C7E532e3B7",    }    yamlBytes, _ := yaml.Marshal(t)    fmt.Print(string(yamlBytes))}这将打印以下内容,并明显表明 Go 决定何时引用字符串:someStringWithQuotes: '"Hello World"'someString: Hello WorldsomeHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7但是,当我尝试使用以下 Python 脚本读取此 YAML 时:import yamlyaml_str = """someStringWithQuotes: '"Hello World"'someString: Hello WorldsomeHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7"""print(yaml.load(yaml_str))它将十六进制值解析为整数。如果我现在使用以下代码序列化回 YAML:import yamlimport sysyaml_str = """someStringWithQuotes: '"Hello World"'someString: Hello WorldsomeHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7"""print(yaml.dump(yaml.load(yaml_str)))我得到:someHexValue: 1272966107484048169783147972546098614451903325111someString: Hello WorldsomeStringWithQuotes: '"Hello World"'我怎样才能最好地确保保留十六进制格式?不幸的是,我个人对 Go 端的代码没有任何影响(但对于尝试做类似事情的其他人来说,Go 端解决方案仍然受欢迎)。
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

Go 将该十六进制字符串解释为一个数字。

someHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7

如果那是它生成的 yaml,那么 python 将其视为数字是正确的。

在 python 中对此的创可贴是使用以下命令将其转换回十六进制

hex(1272966107484048169783147972546098614451903325111)

这是将该十六进制视为数字的yaml 规范


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

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