【问题标题】:converting an array of byte to array of int64 golang [duplicate]将字节数组转换为 int64 golang 数组
【发布时间】:2019-11-27 18:45:44
【问题描述】:

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

【问题讨论】:

  • 代码将message解释为二进制格式,但看起来输入实际上是文本。它可能是 JSON 文本。用一些例子描述输入数据,可能性。
  • 如果有帮助,请在 kafka 主题中输入消息

标签: arrays go byte


【解决方案1】:

问题是您到底想要什么? 如果消息是从 0 到 0xFF 的字节值,而您只是想将 slice 的每个成员转换为 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 值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2014-05-25
    • 2022-10-07
    相关资源
    最近更新 更多