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