英文:
Parse Kafka.header to int in go lang
问题
我一直在尝试将 []kafka.Header 转换为 Go 中的 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。
请随时提供更多信息。
请帮助我解决这个问题,并提供任何建议。提前感谢。
英文:
I have been trying to convert []kafka.Header to int in Go. I have tried quite a few approaches so far.
A few of them are:
- converting the byte array to string and then to int -
string(header.Value)
- converting the first byte to string and then to int -
string(header.Value[0])
- converting the first byte to int -
int(header.Value[0])
- converting the byte array to int using strconv -
strconv.Atoi(string(header.Value))
- custom function to parse by using the base 10 and base 16
But all the approaches so far have either resulted in an error or incorrect conversion.
Snapshot of error messages:
- err: strconv.Atoi: parsing "\x01\x00\x00\x00": invalid syntax
- encoding/hex: invalid byte: U+0001
The input is something like this (single hex bytes in ASCII) - headers: [requestNum="\x01\x00\x00\x00" retryNum="\x1c\x00\x00\x00" retryDelaySecs="@\x01\x00\x00"]
The expected output is their int equivalents i.e. 1, 28, 320
Feel free to ask for more info.
Please assist me with the same with any suggestions. Thanks in advance.
答案1
得分: 1
使用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)
}
}
英文:
Use the encoding/binary package to read binary data. For example:
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)
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论