如何在 golang 中使用 hexstrings 和位移位
how to work with hexstrings and bit shifting in golang
我有一个由 arduino 传感器构建的十六进制字符串 "5FEE012503591FC70CC8"
此值包含一个数组,其中特定数据位于十六进制字符串的特定位置。使用 javascript 我可以将 hexstring 转换为缓冲区,然后应用位移操作来提取数据,例如像这样的电池状态
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 解决方案但在进行中,我将不胜感激。仅供参考,电池信息在十六进制字符串的最后 4 个字符中
将十六进制数字字符串转换为字节切片的标准方法是使用 hex.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:])
我有一个由 arduino 传感器构建的十六进制字符串 "5FEE012503591FC70CC8"
此值包含一个数组,其中特定数据位于十六进制字符串的特定位置。使用 javascript 我可以将 hexstring 转换为缓冲区,然后应用位移操作来提取数据,例如像这样的电池状态
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 解决方案但在进行中,我将不胜感激。仅供参考,电池信息在十六进制字符串的最后 4 个字符中
将十六进制数字字符串转换为字节切片的标准方法是使用 hex.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:])