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

时间:2019-07-18 19:05:50

标签: 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 arr
    }

上面的代码返回一个空的arr,但是当我将[] byte转换为以下字符串时

msg:=string(message)

msg的值为“ [1,2]”

我可以在Go中知道更好,更正确的方法吗?

1 个答案:

答案 0 :(得分:0)

问题是您到底想要什么? 如果消息是从0到0xFF的字节值,而您只想将切片的每个成员转换为int64,则答案是:

ints := make([]int64, len(message))
for index, b := range message {
    ints[index] = int64(b)
}

如果消息是表示int64值的二进制数据,则解决方案要比这复杂得多。因为int64每个都有8个字节长,所以要能够转换一个字节片,消息的长度必须被8整除,并且最好不要有任何余数。我们在这里删除其他情况。

那么,答案是:

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值。

我想第二种情况要复杂一些,第一种情况可以解决您真正想要的。