我有这个简单的以下程序: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 规范
添加回答
举报
0/150
提交
取消