各位,我现在写一个程序。定义一个CString csCommand,作为一个数据包,格式为
包头 命令字 包长 数据 校验和 包尾
FEFEFEFE 31 000A x1x2x3x4x5 Z1Z2Z3Z4 FCFCFCFC
x1x2x3x4x5是五个数据,共10个字节
Z1Z2Z3Z4是校验和,计算从命令字到最后一个字节的数据之间所有字节的和
我按照相关例程编写了以下程序,能在csCommand中写入FEFEFEFE31000A
输入数据存在LPCTSTR lpszWriteDataString,我无法将获得的数据加入到csCommand中,好像我使用的函数不正确。还有校验和的采用什么函数计算呢?
INT OnWriteData(CItem* pItem, LPCTSTR lpszWriteDataString, LPTSTR lpszSendString, INT&
nSendStringLen)
{
//生成写命令字符串
CPacket* pPacket = pItem->GetPacket();
CDevice* pDevice = pPacket->GetDevice();
CChannel * pChannel = pDevice->GetChannel();
pChannel->ClearAcceptBuffer(); //清空缓冲区
IOITEMDEF * pItemStru = pItem->GetItemStru();//得到点的数据
CString csCommand = "";
csCommand += "FEFEFEFE"; //写入开始符
csCommand += "0X31000A"; //写入命令字和包长
CString ndata;
sscanf(lpszWriteDataString,"%s",ndata);
CString string;
csCommand+=ndata;//写入数据
string="000A"+ndata;//取得校验和
csCommand+=string;//写入校验和
csCommand+="FCFCFCFC";//写入结束符FCFCFCFC
包头 命令字 包长 数据 校验和 包尾
FEFEFEFE 31 000A x1x2x3x4x5 Z1Z2Z3Z4 FCFCFCFC
x1x2x3x4x5是五个数据,共10个字节
Z1Z2Z3Z4是校验和,计算从命令字到最后一个字节的数据之间所有字节的和
我按照相关例程编写了以下程序,能在csCommand中写入FEFEFEFE31000A
输入数据存在LPCTSTR lpszWriteDataString,我无法将获得的数据加入到csCommand中,好像我使用的函数不正确。还有校验和的采用什么函数计算呢?
INT OnWriteData(CItem* pItem, LPCTSTR lpszWriteDataString, LPTSTR lpszSendString, INT&
nSendStringLen)
{
//生成写命令字符串
CPacket* pPacket = pItem->GetPacket();
CDevice* pDevice = pPacket->GetDevice();
CChannel * pChannel = pDevice->GetChannel();
pChannel->ClearAcceptBuffer(); //清空缓冲区
IOITEMDEF * pItemStru = pItem->GetItemStru();//得到点的数据
CString csCommand = "";
csCommand += "FEFEFEFE"; //写入开始符
csCommand += "0X31000A"; //写入命令字和包长
CString ndata;
sscanf(lpszWriteDataString,"%s",ndata);
CString string;
csCommand+=ndata;//写入数据
string="000A"+ndata;//取得校验和
csCommand+=string;//写入校验和
csCommand+="FCFCFCFC";//写入结束符FCFCFCFC
CString str;
int a=5;
str.Format("%d", a);
ndata=lpszWriteDataString;
/////////////////////
那校验和采用什么方法计算呢?直接采用字符串相加可以吗?
Z1Z2Z3Z4是校验和,计算从命令字到最后一个字节的数据之间所有字节的和,采用单字节加法,低字节溢出高字节加1,高字节溢出舍弃
char *pBuffer = new char [nLength] ;
ASSERT(pBuffer);
strcpy(pBuffer, (LPSTR)(LPCTSTR)ndata);
//依pBuffer计算校验和
delete [] pBuffer;