Golang中hex和readUInt16BE的Node.js缓冲区

Golang中hex和readUInt16BE的Node.js缓冲区,node.js,go,Node.js,Go,我在nodejs中有这样的代码: // Create Buffer from hex representation b = new Buffer('002400050200000000320000000003847209cd4450ff94ad8c0000000002c581000001d3', 'hex') // Read with offset 0 b.readUInt16BE(0) // -> Out: 36 它读取一个字符串,该字符串是数据的十六进制表示形式。当读取头两个字节u

我在nodejs中有这样的代码:

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

// Read with offset 0
b.readUInt16BE(0) // -> Out: 36
它读取一个字符串,该字符串是数据的十六进制表示形式。当读取头两个字节uint16be时,将获得int(36)。这是预期的行为

我需要使用Go复制这个行为,但我有一些问题

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

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

// 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

您能帮我理解这一点吗?

您正在向缓冲区追加一个十进制值24,而您应该追加十六进制值0x24:

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])