//构造发送数据帧的函数,返回值为发送数据的字节长度
int MakeSendDataBuf(unsigned char Comm, AnsiString Message)
{
int strLen,DataLen,TotalDataLen,i;
unsigned long CheckSum;
strLen = Message.Length(); //得到字符串长度
DataLen = strLen+7; //数据帧中的DLEN字段的值
TotalDataLen = DataLen+6; //全数据帧的字节长度
//在发送缓冲区中先填充帧同步头
SendBuf[0] = 0xFF;
SendBuf[1] = 0x55;
SendBuf[2] = 0xFF;
SendBuf[3] = 0xAA;
//然后填充DLEN
SendBuf[4] = DataLen & 0x00FF;
SendBuf[5] = (DataLen & 0xFF00)>>8;
//接下来是帧号
SendBuf[6] = giFrameNO & 0x00FF;
SendBuf[7] = (giFrameNO & 0xFF00)>>8;
SendBuf[8] = (giFrameNO & 0xFF00)>>16;
SendBuf[9] = (giFrameNO & 0xFF00)>>24;
//然后是指令类型
SendBuf[10] = Comm;
//然后是消息内容
for(i=0;i<strLen;i++)
{
SendBuf[11+i] = Message[i+1];
}
//数据帧结束符
SendBuf[TotalDataLen-2] = 0xFE;
//计算校验和
CheckSum = 0;
for(i=0;i<TotalDataLen-1;i++)
{
CheckSum += SendBuf[i];
}
//将检验和的最低位字节填充到发送缓存
SendBuf[TotalDataLen-1] = CheckSum & 0xFF;
return TotalDataLen;
}
c++ 16进制
最新推荐文章于 2024-07-27 13:31:57 发布