gpt4 book ai didi

python - 如何在Golang中将这些(十六进制)数字转换为字符?

转载 作者:行者123 更新时间:2023-12-01 21:23:37 25 4
gpt4 key购买 nike

我通过 radio 芯片收到一些字符,尝试从串行端口读取。我可以在this Python code中很好地读出它,这给了我这个:

received: counter: 2703
received: counter: 2704
received: counter: 2705

因此,使用 go-serial package我编写了一些代码来在Go中执行相同的操作:
package main

import "fmt"
import "log"
import "github.com/jacobsa/go-serial/serial"
import "io"
import "encoding/hex"


func main() {
// Set up options.
options := serial.OpenOptions{
PortName: "/dev/ttyUSB0",
BaudRate: 9600,
DataBits: 7,
StopBits: 2,
MinimumReadSize: 4,
}

// Open the port.
port, err := serial.Open(options)
if err != nil {
log.Fatalf("serial.Open: %v", err)
}
defer port.Close()

for {
buf := make([]byte, 32)
n, err := port.Read(buf)
if err != nil {
if err != io.EOF {
fmt.Println("Error reading from serial port: ", err)
}
} else {
buf = buf[:n]
fmt.Println("received: ", buf)
fmt.Println("received: ", hex.EncodeToString(buf))
}
}
}

如您所见,我将接收到的缓冲区原始打印并从十六进制转换为字符串。结果是这样的:
received:  [99 111 117 110 116 101 114 58 32 51 48 50 52 10]
received: 636f756e7465723a20333032340a
received: [99 111 117 110 116 101 114 58 32 51 48 50 53 10]
received: 636f756e7465723a20333032350a
received: [99 111 117 110 116 101 114 58 32 51 48 50 54 10]
received: 636f756e7465723a20333032360a

我猜这些数字代表 counter: 2704,但是如您所见,转换为字符串并没有得到我期望的结果。

有人知道我在做什么错吗?如何将这些数字转换为字符串?欢迎所有提示!

最佳答案

输入的文本已经是有效的字符串。只是您将字节存储在buf中,即[]byte中。要将现有的[]byte转换为string类型的值:

asString := string(buf)
hex.EncodeToString返回字符串时,它返回每个字节的十六进制表示形式。例如,小写的 c(十进制代码99)的UTF-8/ASCII是 0x63,因此 hex.EncodeToString的前两个字符是 63

(与此同时,您应该弄清楚如何处理实际错误。在宣布任何不是 io.EOF的错误之后,您的代码当前将其忽略。如果您的设备进入错误状态,您将一遍又一遍地循环以获取相同的错误。)

关于python - 如何在Golang中将这些(十六进制)数字转换为字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58652316/

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