这是小弟我写的一段组包的源码,请大家看看

这是我写的一段组包的源码,请大家看看?
//组装串口发过来的报文格式
        char   *SSjxlh   =   "136161203810381 ";     //15位的手机序列号

        char   Data[10];
        char   DStr[20];
        char   DStrS[22];

        int   I;
        for(I=0;I <8&&SSjxlh[I*2];I++)
        {
              if(SSjxlh[I*2+1])
              {
                    Data[I]   =   SSjxlh[I*2]*10+SSjxlh[I*2+1];
              }
              else
              {
                        Data[I]   =   SSjxlh[I*2];
                        I++;break;
              }
        }               //转换成8位BCD码


        Data[I]   =   0;
        Data[I+1]   =   3;               //在8位BCD码后加入“03”交易码

        //对Data(共10位)进行加密
        x_StrCryptUN(Data,10, "99 ");       // "99 "为密钥,加密成10位

        BinToHex(Data,DStr,I+2);     //把Data由二进制转换成16进制,长度扩展为一倍,即20位

        DStrS[0]= '9 ';
        DStrS[1]= '9 ';
        strcpy(DStrS+2,DStr);     //在DStr前加上 "99 "两位密钥,组合成22位的固定报文

        char   *Sjy= "policeNum=32051234&searchDate=20060526& ";   //http格式的报文-警员号+查询日期
        int   rlen;
        rlen=strlen(Sjy);
        AnsiString   SBwmx= " ";
        x_StrCryptUN(Sjy,rlen, "3204010123456789 ");     //利用“3204010123456789”16位通讯密钥进行加密,长度不变
        for   (int   j=0;j <rlen;j++)
        {
            SBwmx=SBwmx+IntToHex(Sjy[j],2);     //转换成16进制,长度扩展为1倍
        }

        //把两串报文组合在一起
        AnsiString   SBwall;
        SBwall=AnsiString(DStrS)+SBwmx;

        //把该串报文组合成串口报文
        //通讯序号设为 "0 "
        //数据长度=通讯序号的长度(1)+报文的长度(求SBwall的长度)
        int   datalen;
        AnsiString   dataxh= "1 ";
        datalen=SBwall.Length()+1;     //求得数据长度(最大3位)

        //对数据长度、通讯序号、报文数据进行组装,并进行校验运算
        AnsiString   DataMx;
        DataMx=AnsiString(datalen)+dataxh+SBwall;

        //校验   (对数据长度、通讯序号、报文数据的校验,也即对DataMx的校验)
        unsigned   char   *CDataMx;
        CDataMx=DataMx.c_str();     //把AnsiString类型字符串转换为char字符串