在 go lang 中将 Kafka.header 解析为 int

我一直在尝试在 Go 中将 []kafka.Header 转换为 int。到目前为止,我已经尝试了很多方法。

其中一些是:

  • 将字节数组转换为字符串,然后再转换为 int -string(header.Value)

  • 将第一个字节转换为字符串,然后转换为 int -string(header.Value[0])

  • 将第一个字节转换为 int -int(header.Value[0])

  • 使用 strconv 将字节数组转换为 int -strconv.Atoi(string(header.Value))

  • 使用 10 进制和 16 进制解析的自定义函数

但是到目前为止,所有的方法要么导致了错误,要么导致了不正确的转换。

错误消息的快照:

  • 错误:strconv.Atoi:解析“\x01\x00\x00\x00”:语法无效

  • 编码/十六进制:无效字节:U+0001

输入是这样的(ASCII 中的单个十六进制字节)-headers: [requestNum="\x01\x00\x00\x00" retryNum="\x1c\x00\x00\x00" retryDelaySecs="@\x01\x00\x00"]

预期输出是它们的 int 等价物,即 1、28、320

随时询问更多信息。如果有任何建议,请帮助我。提前致谢。


慕田峪7331174
浏览 89回答 1
1回答

撒科打诨

使用encoding/binary包读取二进制数据。例如:package mainimport (    "encoding/binary"    "fmt"    "github.com/confluentinc/confluent-kafka-go/kafka")func main() {    headers := []kafka.Header{        {            Key:   "requestNum",            Value: []byte("\x01\x00\x00\x00"),        },        {            Key:   "retryNum",            Value: []byte("\x1c\x00\x00\x00"),        },        {            Key:   "retryDelaySecs",            Value: []byte("@\x01\x00\x00"),        },    }    for _, h := range headers {        v := binary.LittleEndian.Uint32(h.Value)        fmt.Printf("%s: %d\n", h.Key, v)    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go