0

Boostasioシリアル関数を使用してシリアルポート経由でデータを送信しています。私は過去にそれを使用しました、そしてそれは私が望むように働きました。しかし、今では奇妙な動作をします。これは私がデータを送信するために使用したコードです:

int data = 97;    //represents 'a'
string sendThis = "0";
sendThis[0] = (char)data;
cout<<sendThis<<" "<<data<<endl;
boost::asio::write(serial,boost::asio::buffer(sendThis,1));

ここに問題があります:128より大きいデータを送信すると、送信したものを正確に取得します。しかし、128未満の文字を送信しようとすると、反対側では、128が追加されます。これは「a」の場合は225です。この問題のため、私は常に128から255の間で取得します。さまざまな送信方法を試しましたが、結果は常に同じです。どんな提案でも大歓迎です。

4

1 に答える 1

1

私は自分の問題を解決しました。問題は、コメントで前述したようにデータビットオプションでした。したがって、特に以前の状態を保護できる場合は、デフォルト値を決して信頼しないでください。だから私はどういうわけかデータビットオプションが変更され、それは常にその値を使用したと思います。私は要約によってオプションを設定しました:

serial_port_base::character_size x(8);
serial_port serial(io,"COM58");
serial.set_option(x);

その後、それは機能しました。オプションの設定をコメントしてやり直したより。そして、それは再び機能しました。だから私はそれが以前の状態を保護すると思います。したがって、デフォルト値には注意してください。それらはもはやデフォルトではないかもしれません。

于 2013-02-08T10:28:03.093 に答える