登录
首页 >  Golang >  Go问答

将 byte 数组转换为 int64 golang 数组

来源:stackoverflow

时间:2024-04-18 18:39:36 141浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《将 byte 数组转换为 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 值。

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

本篇关于《将 byte 数组转换为 int64 golang 数组》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>