各位,我现在写一个程序。定义一个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

解决方案 »

  1.   

    基本操作是
    CString str;
    int a=5;
    str.Format("%d", a);
      

  2.   

    这一句sscanf(lpszWriteDataString,"%s",ndata);改为:
    ndata=lpszWriteDataString;
    /////////////////////
      

  3.   

    看了半天才明白你是要LPCTSTR 到CString的转换LPCTSTR 到CString可以直接赋值。ndata = lpszWriteDataString;
      

  4.   

    看了半天才明白你是要LPCTSTR 到CString的转换LPCTSTR 到CString可以直接赋值。ndata = lpszWriteDataString;正解
      

  5.   

    谢谢各位,我用ndata= lpszWriteDataString;能把数据传过去了
    那校验和采用什么方法计算呢?直接采用字符串相加可以吗?
    Z1Z2Z3Z4是校验和,计算从命令字到最后一个字节的数据之间所有字节的和,采用单字节加法,低字节溢出高字节加1,高字节溢出舍弃
      

  6.   

    int nLength = ndata.GetLength()+1 ;
    char *pBuffer = new char [nLength] ;
    ASSERT(pBuffer);
    strcpy(pBuffer, (LPSTR)(LPCTSTR)ndata);
    //依pBuffer计算校验和
    delete [] pBuffer;