如何在golang中使用十六进制字符串和位移位



我有一个六边形字符串,我从arduino传感器"5FEE012503591FC70CC8"构建

该值包含一个数组,其中特定的数据放置在十六进制字符串的特定位置。使用javascript,我可以将十六进制字符串转换为缓冲区,然后应用位移位操作来提取数据,例如电池状态,如下所示

const bytes = new Buffer.from("5FEE012503591FC70CC8", "hex");
const battery = (bytes[8] << 8) | bytes[9];
console.log(battery)

我的尝试工作,但我觉得它不是最优的方式像js我已经显示了上面

package main
import (
"fmt"
"strconv"
)
func main() {
hex := "5FEE012503591FC70CC8"
bat, err := strconv.ParseInt(hex[16:20],16,64)
if err != nil {
panic(err)
}
fmt.Println("Battry: ",bat)
}

我真的很感激如果有人能告诉我如何使用缓冲区或等效的js解决方案,但在go。仅供参考,电池信息在十六进制字符串

的最后4个字符中。

将十六进制数字字符串转换为字节片的标准方法是使用十六进制。DecodeString:

import "encoding/hex"
bs, err := hex.DecodeString("5FEE012503591FC70CC8")

您可以将最后两个字节转换为uint16(无符号,因为电池级别可能不是负的),以与Javascript相同的方式:

bat := uint16(bs[8])<< 8 | uint16(bs[9])

https://play.golang.org/p/eeCeofCathF

或者您可以使用encoding/binary包:

bat := binary.BigEndian.Uint16(bs[8:])

https://play.golang.org/p/FVvaofgM8W-

最新更新