while ループを使用したシリアル ポートからの読み取り
この質問は、シリアル ポートを介してセンサーと通信するために 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 中国語 Web サイトの他の関連記事を参照してください。