2个字节就用short(或u_short),加和到一个int,然后字节序需要转一下(用htons把大头在后转成大头在前),在把数据都拷到一个内存块(BYTE数组什么的)。
发送就发送那个内存块,具体串口怎么发送没做过就不知道了

解决方案 »

  1.   

    给你写段代码参考。
    BOOL SendData(LPWORD Data, BYTE Length) // Data是要发送的数据指针,Length是数据的个数
    {
    int bufferLength = Length * sizeof(WORD) + 4; // 计算要发送的数据的字节总数
    LPBYTE buffer = new BYTE[bufferLength]; // 分配缓冲区
    buffer[0] = 0x24; // 数据头
    buffer[1] = Length; // 数据长度
    buffer[2] = 0x54; // 为指令
    LPBYTE p = buffer + 3; // 数据开始
    BYTE checkSum = 0x54; // 校验和
    for (BYTE i=0; i<Length; i++) // 复制并调整数据
    {
    *p = *((LPBYTE)(Data+i)+1); // 取高字节
    checkSum += *p++; // 计算校验和
    *p = (BYTE)*(Data+i); // 取低字节
    checkSum += *p++; // 计算校验和
    }
    *p = checkSum; // 把校验和放在发送数据的最后 BOOL result = Send(buffer, bufferLength); // 自己写个发送数据函数 return result; // 返回发送结果
    }
      

  2.   

    你想复杂了,协议一般放在unsigned char字符串中发送出去;至于数据只是字符串中的任意2字节而已。
    从你的叙述中,我假设你的数据都是整型数据,现以任意数据n为例:int nDatan;               //整型数据n
    unsigned char cD[2];      //数据n转化为协议中的2字节
    cD[0] = nDatan / 256 ;    //协议中高字节
    cD[1] = nDatan % 256 ;    //低字节将cD[2]赋给协议相应位置即可,多个数据就自己处理一下循环逻辑。协议的其他字节就向unsigned char字符串中赋值就行了,最后计算一下校验位,按上面的方法取余,OK。
      

  3.   

    BOOL SendData(USHORT u16Data,HANDLE hComm)
    {
    if(!hComm)
    {
    return FALSE;
    } BYTE pu8DataBuffer[6]; pu8DataBuffer[0]=0x24;
    pu8DataBuffer[1]=4;
    pu8DataBuffer[2]=0x54;
    pu8DataBuffer[3]=u16Data>>8;
    pu8DataBuffer[4]=u16Data;
    pu8DataBuffer[5]=pu8DataBuffer[2]+pu8DataBuffer[3]+pu8DataBuffer[4]; DWORD byteswritten;
    return WriteFile(hComm,pu8DataBuffer,6,&byteswritten,NULL);
    }其中hComm是用CreateFile获得的串口句柄。