0

我正在尝试创建一个 46 长的 ascii 字符串/数据包,通过串行发送出去。

标头是“###”,后跟两个 16 字符的 ascii 字符串,然后是表示二进制字节的 8 字符 acii 字符串。
然后用一个 3 字节的校验和来完成。

总长度为 46 字节。

我的问题是两个方面。

首先,如果两个 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 回答