猿问

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

我有这个简单的以下程序:


package main


import (

    "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 World

someHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7

但是,当我尝试使用以下 Python 脚本读取此 YAML 时:


import yaml


yaml_str = """

someStringWithQuotes: '"Hello World"'

someString: Hello World

someHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7

"""


print(yaml.load(yaml_str))

它将十六进制值解析为整数。如果我现在使用以下代码序列化回 YAML:


import yaml

import sys


yaml_str = """

someStringWithQuotes: '"Hello World"'

someString: Hello World

someHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7

"""


print(yaml.dump(yaml.load(yaml_str)))

我得到:


someHexValue: 1272966107484048169783147972546098614451903325111

someString: Hello World

someStringWithQuotes: '"Hello World"'

我怎样才能最好地确保保留十六进制格式?不幸的是,我个人对 Go 端的代码没有任何影响(但对于尝试做类似事情的其他人来说,Go 端解决方案仍然受欢迎)。


大话西游666
浏览 152回答 2
2回答

慕田峪4524236

Go 将该十六进制字符串解释为一个数字。someHexValue: 0xDef9C64256DeE61ebf5B212238df11C7E532e3B7如果那是它生成的 yaml,那么 python 将其视为数字是正确的。在 python 中对此的创可贴是使用以下命令将其转换回十六进制hex(1272966107484048169783147972546098614451903325111)这是将该十六进制视为数字的yaml 规范
随时随地看视频慕课网APP

相关分类

Python
我要回答