繁体   English   中英

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

[英]converting an array of byte to array of int64 golang

我遇到了一种情况,我想将一个字节数组转换为 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 中执行此操作的更好更正确的方法吗?

问题是你到底想要什么? 如果消息是从 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 值。

我想第二种情况有点复杂,你真正想要的可以用第一种情况解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM