- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シリアル通信でのNULL送受信方法について)
シリアル通信でNULL送受信方法について
このQ&Aのポイント
- シリアル通信でNULL(0x00)を送受信する方法について疑問があります。現在、プログラム初心者で、visual Studio 2008 c++でRS-485 シリアル通信プログラムを書いています。仕様書には送信コマンドが02 00 20 1b 03 3Bと表記されていますが、00がNULLとなるため、NULLの送信は可能なのでしょうか。
- プログラムでのコマンド送信部分ではNULL文字以降も正しく送信できているのかが不明です。指定のポートは正常に開けることができていますが、NULL以降のコマンドが送信されているか確認したいです。
- また、受信コマンドもNULL以降が正常に読み込まれているかも確認したいです。NULL(0x00)を使ったシリアル通信の送受信が可能なのかについて意見やアドバイスをいただけると助かります。初心者なので必要なコードや情報が不足している部分があるかもしれませんので、指摘していただけるとありがたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
0x00 は、NULL という「文字」のコードですから、もちろん送れます。 送れないのは、文字列の最後を示すのに NULL を使っている処理系では、「文字列として読み込みをしたら、そりゃNULLで止まる」というだけのことで、バイナリデータとして読み書きするルーチンや関数を用いれば済むことです。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10361)
回答No.2
シリアル通信では、0x00~0xFFの任意のバイトを送ることが出来ます。 (ソフトウェアフロー制御を行っているとフロー制御文字は送れないが) 0x00 は、NUL と3文字で表現します。NULLと書くとCでのヌルポインタを意味します。 NULを含んだ文字列は、文字列処理関数では処理出来ませんので、バイナリデータとして扱う関数を使う必要があります。
質問者
お礼
回答ありがとうございます。 関数を調べてみます。
お礼
回答ありがとうございます。 別の質問として取り扱うことにしました。 そちらにお答えいただければ幸いです。
補足
回答ありがとうございます。 バイナリデータとして読み書きすることができればよいのですね。 いろいろ調べたのですが,バイナリデータとして読み書きする関数の使用例がよく分からないので教えていただいてもよいでしょうか…。