While ループを使用して Go のシリアル ポートからすべてのデータを正しく読み取る方法は?

Susan Sarandon
リリース: 2024-10-26 21:29:29
オリジナル
823 人が閲覧しました

How to Correctly Read All Data from a Serial Port in Go with a While-Loop?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!