Arrays 将字节数组转换为int64 golang数组

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

我遇到了一种情况,我想将字节数组转换为int64数组,我正在尝试执行以下操作

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文本。描述输入数据,并举例说明。如果有帮助,可以在卡夫卡主题中输入信息