gpt4 book ai didi

来自十六进制的 Node.js 缓冲区和 Golang 中的 readUInt16BE

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:23 26 4
gpt4 key购买 nike

我在 nodejs 中有这样一段代码:

// Create Buffer from hex representation
b = new Buffer('002400050200000000320000000003847209cd4450ff94ad8c0000000002c581000001d3', 'hex')

// Read with offset 0
b.readUInt16BE(0) // -> Out: 36

它读取一个字符串,它是数据的十六进制表示。当读取前两个字节 readUInt16BE 时,将获得一个 int (36)。这是预期的行为。

我需要使用 Go 复制此行为,但我遇到了一些麻烦。

1) 如何从十六进制格式的字符串创建缓冲区?2) 如何实现 readUInt16BE 函数以便在读取前两个字节时获得 (36)?

我可以用 00 24 创建一个缓冲区,但我需要使用任何字符串。

// Creates buffer [00 24]
v := make([]byte, 0, 2)
v = append(v, 0)
v = append(v, 24)
fmt.Println(v) // -> out: [0 24]

最后,我对函数 binary.BigEndian.Uint16 有点困惑,它返回 24 而不是 36。

x := binary.BigEndian.Uint16(v)
fmt.Println(x) // -> out: 24

你能帮我理解一下吗?

最佳答案

当您应该附加十六进制值 0x24 时,您将十进制值 24 附加到缓冲区:

v := make([]byte, 0, 2)
v = append(v, 0)
v = append(v, 0x24)
fmt.Println(v)

x := binary.BigEndian.Uint16(v)
fmt.Println(x)

将原始的 Node.js 代码转换为 Go 看起来像下面这样:

import (
"encoding/binary"
"encoding/hex"
)

b, err := hex.DecodeString(`002400050200000000320000000003847209cd4450ff94ad8c0000000002c581000001d3`)
if err != nil {
// TODO: handle error
}
_ = binary.BigEndian.Uint16(b[:2])

关于来自十六进制的 Node.js 缓冲区和 Golang 中的 readUInt16BE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47999304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com