如何在封送到json时强制将“[8]字节”编码为十六进制

如何在封送到json时强制将“[8]字节”编码为十六进制,json,go,Json,Go,默认情况下,字节片编组为Base64字符串,字节数组按原样转换: func main() { type Foo struct { ByteSlice []byte ByteArray [6]byte } foo := Foo { ByteSlice: []byte{0, 0, 0, 1, 2, 3}, ByteArray: [6]byte{0, 0, 0, 1, 2, 3}, } text,

默认情况下,字节片编组为Base64字符串,字节数组按原样转换:

func main() {
    type Foo struct {
        ByteSlice []byte
        ByteArray [6]byte
    }

    foo := Foo {
        ByteSlice: []byte{0, 0, 0, 1, 2, 3},
        ByteArray: [6]byte{0, 0, 0, 1, 2, 3},
    }
    text, _ := json.Marshal(foo)
    fmt.Printf("%s", text)
}
输出:

{"ByteSlice":"AAAAAQID","ByteArray":[0,0,0,1,2,3]}
有没有办法对字节片使用十六进制字符串转换

有没有办法对字节片使用十六进制字符串转换

不,没有

你必须自己编码。可以使用字符串字段写入新结构,也可以按照包json的文档中所述编写自己的UnmarshalJSON方法

有没有办法对字节片使用十六进制字符串转换

不,没有


你必须自己编码。可以使用字符串字段写入新结构,也可以按照包json的文档中所述编写自己的UnmarshalJSON方法。

如果定义自定义类型,则可以自定义json序列化。我已经替换了
[]字节
,例如:

输出:

{"ByteSlice":"000000010203","ByteArray":[0,0,0,1,2,3]}
代码:


如果定义自定义类型,则可以自定义JSON序列化。我已经替换了
[]字节
,例如:

输出:

{"ByteSlice":"000000010203","ByteArray":[0,0,0,1,2,3]}
代码:


另外,要使用它,您可以执行
MyByteSlice(arr[:])
其中
arr
是您的字节数组。这是从数组中生成切片的方式,基本上就是引用数组。此外,要使用它,可以执行
MyByteSlice(arr[:])
其中
arr
是字节数组。这就是如何从数组中生成切片,基本上就是获取对数组的引用。