0

シリアル経由で送信される 46 の長い ASCII 文字列/パケットを作成しようとしています。

ヘッダーは「###」で、その後に 2 つの 16 文字の ASCII 文字列が続き、その後にバイナリ バイトを表す 8 文字の ASCII 文字列が続きます。
これは、3 バイトのチェックサムで完了します。

全長 46 バイト。

私の問題は2つあります。

最初に、2 つの 16 バイト文字列がいっぱいになると、それらの後にスペースが追加されます。

次に、16 バイトのテキスト ウィンドウがいっぱいでない場合、残りのスペースをスペース文字で埋めたいと思います。このようにして、パケットは常に固定長になります。

PadRight(Int32,char) を使用しようとしていますが、文字列に何も追加されません。最終的に何が起こるかというと、コードがチェックサムを追加しようとすると、追加のパディングなしではパケットが小さすぎるため、範囲外になります。

ビルドするとエラーは発生しませんが、明らかに何か間違ったことをしました。

動作しないコード スニペットを次に示します。

TxPacket="###";
         TxText1=txtSerialTx1->Text;
         TxText2=txtSerialTx2->Text;

         TxText1=TxText1->Replace("\r\n","");  // stripping out CR and LF
         TxText2=TxText2->Replace("\r\n","");

         if((TxText1->Length) < 16)           // Checking for valid length
            {
                TxText1->PadRight((16-(TxText1->Length)),'S');
            }
         if((TxText2->Length) < 16)
            {
                TxText2->PadRight((16-(TxText2->Length)),'S');
            }

         TxPacket="###"+ TxText1 + TxText2 + TxLed;

    for(int i=3;i<40;i++)
        {
            iChecksum+= TxPacket[i];
        }

    TxPacket+=(iChecksum%1000);

         serialPort1->Write(TxPacket);
4

1 に答える 1

0

もう少し遊んだ後、私の問題を見つけました。パディングの長さが固定値であり、C++ が挿入するスペースの数を計算することを認識していなかったので、オフセットを手動で計算していました。
また、最終結果を文字列に割り当てていないことにも気付きました。MSDN には、コードとインラインで実行される例があったため、値を再割り当てしませんでした。

于 2012-11-29T20:38:39.527 に答える