Arrays 将字节数组转换为int64 golang数组
我遇到了一种情况,我想将字节数组转换为int64数组,我正在尝试执行以下操作Arrays 将字节数组转换为int64 golang数组,arrays,go,byte,Arrays,Go,Byte,我遇到了一种情况,我想将字节数组转换为int64数组,我正在尝试执行以下操作 func covertToInt64(message []byte) []int64{ rbuf := bytes.NewBuffer(message) arr := []int64{} e := binary.Read(rbuf, binary.LittleEndian, &arr) if e != nil { } return
func covertToInt64(message []byte) []int64{
rbuf := bytes.NewBuffer(message)
arr := []int64{}
e := binary.Read(rbuf, binary.LittleEndian, &arr)
if e != nil {
}
return arr
}
上面返回一个空的arr,但当我将[]字节转换为字符串时,如下所示
msg:=string(message)
msg的值为[1,2]
我能知道在围棋中做这件事的更好和正确的方法吗?问题是你到底想要什么? 如果消息是从0到0xFF的字节值,并且您只想将片的每个成员强制转换为int64,那么答案是:
ints := make([]int64, len(message))
for index, b := range message {
ints[index] = int64(b)
}
ml := len(message)
il := ml/8
if ml%8 != 0 {
// there's more than il*8 bytes, but not
// enough to make il+1 int64 values
// error out here, if needed
}
ints := make([]int64, il)
err := binary.Read(bytes.NewReader(message), ints)
如果消息是二进制数据,表示int64值,那么解决方案就比这复杂一些。由于int64每个字节长8个字节,因此为了能够转换一个字节片,消息的长度必须能被8整除,最好没有余数。我们在这里放下其他案子
那么,答案是:
ints := make([]int64, len(message))
for index, b := range message {
ints[index] = int64(b)
}
ml := len(message)
il := ml/8
if ml%8 != 0 {
// there's more than il*8 bytes, but not
// enough to make il+1 int64 values
// error out here, if needed
}
ints := make([]int64, il)
err := binary.Read(bytes.NewReader(message), ints)
问题是,当您调用binary.Read时,您需要提前知道目标值的大小。读取失败的原因是:目标长度为零,此外,源长度不足以读取任何一个int64值
我想第二种情况更复杂一些,你真正想要的东西可以用第一种情况解决 代码将消息解释为二进制格式,但看起来输入实际上是文本。它可能是JSON文本。描述输入数据,并举例说明。如果有帮助,可以在卡夫卡主题中输入信息