[英]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.