使用 While-Loop 从串口读取
这个问题涉及用 Go 编写的程序,通过串口与传感器进行通信。该程序包含一个 while 循环来读取传入的数据,但无法正常运行。
原始代码:
<code class="go">buf := make([]byte, 40) n := 0 for { n, _ = s.Read(buf) if n > 0 { break } } fmt.Println(string(buf[:n]))</code>
问题解释:
这段代码的问题是 Read() 可以在任何时间点返回任意数量的可用数据。这意味着如果接收到少量数据,它将在下一次循环迭代中被覆盖。
解决方案:
为了正确读取所有传入的数据,我们可以使用 bufio.Reader 读取数据,直到遇到特定的分隔符。在本例中,分隔符假设为 'x0a'。
修改代码:
<code class="go">reader := bufio.NewReader(s) reply, err := reader.ReadBytes('\x0a') if err != nil { panic(err) } fmt.Println(reply)</code>
此代码将继续从串口读取数据,直到遇到“x0a”分隔符。然后结果存储在回复变量中并打印。
以上是如何使用While循环正确读取Go中串口的所有数据?的详细内容。更多信息请关注PHP中文网其他相关文章!