シリアル経由で送信される 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);