PadRight(Int32,char)问题

时间:2012-11-29 20:13:40

标签: .net winforms visual-c++ c++-cli

我正在尝试创建一个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);

1 个答案:

答案 0 :(得分:0)

在玩了一些之后找到了我的问题。我没有意识到填充的长度是一个固定值,C ++将计算为我插入的空格数,所以我手动计算出偏移量。
还注意到我没有将最终结果分配回字符串。 MSDN有一个与代码内联的示例,因此他们没有重新分配值。