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

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

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

Go
慕田峪7331174 2023-03-15 14:56:37
我一直在尝试在 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随时询问更多信息。如果有任何建议,请帮助我。提前致谢。
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

使用encoding/binary包读取二进制数据。例如:

package main


import (

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

    }

}


查看完整回答
反对 回复 2023-03-15
  • 1 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

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