我正在尝试创建一个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);
答案 0 :(得分:0)
在玩了一些之后找到了我的问题。我没有意识到填充的长度是一个固定值,C ++将计算为我插入的空格数,所以我手动计算出偏移量。
还注意到我没有将最终结果分配回字符串。 MSDN有一个与代码内联的示例,因此他们没有重新分配值。