我用2,3,5这三天线与另一台点的串口相连,而我有68,CB,00,01,68,53,16这些16进制数,现在我要程序初始化后用16进制形式发送到第二台电脑,第二台电脑是用16进制接受.但是第二台电脑接受到的并不是以上那几个16进制数,而是一些其他数,我不知道是不是转化的时候把我这几个16进制数,当成了字符或int形了~~请问如何转换才是好呢??高手们可以给出具体代码吗??谢谢

解决方案 »

  1.   

    你是怎么发的。发送HEX码应该是这样的
    unsigned char buf[10]; // or BYTE buf[10];memset(buf, 0, 10);buf[0] = 0x68;
    buf[1] = 0xcb;
    buf[2] = 0c01;
    buf[3] = 0x68;
    buf[4] = 0x53;
    buf[5] = 0x16;把buf用writefile(API方式)或者控件的send发送出去就可以了
      

  2.   

    呵呵,传输的时候都是二进制如果你发CB那另一个收到的是他的ASC码
      

  3.   

    zhangnanonnet(鱼欢) 你的方法还是不行啊~~以下是我原来的的代码:
           char  TxData[100];
    int Count = m_strSend.GetLength(); for(int i= 0;i<Count; i++)
    buf[i] = m_strSend.GetAt(i); CByteArray array;

    array.RemoveAll();
    array.SetSize(Count);
            for(i = 0;i<Count; i++)
    array.SetAt(i,TxData[i]); m_Com.SetOutput(COleVariant(TxData));
      

  4.   

    哦。。哥们你用的是char *当然不行啦。我给你转换的程序吧。把转换之后的char *发送过去就应该可以了
    // 转换2字节16进制的字符串到ASCII字符串
    extern "C" BOOL pascal HextoAscii(char* sHex,char* sReply)
    {
    int iLen,i,j=0;
    BYTE * lsData;
    BYTE * lsReply; if(sHex==NULL)
    {
    return FALSE;
    }
    iLen=strlen(sHex);
    if((iLen%2!=0)||(iLen>1024))
    {
    return FALSE;
    }
    if(sReply==NULL)
    {
    return FALSE;
    } iLen=strlen(sHex);
    lsData=new BYTE[iLen];
    lsReply=new BYTE[iLen/2+1];
    memcpy(lsData,sHex,iLen);
    for(i=0;i<iLen;i+=2)
    {
    if(((lsData[i]>='0'&&lsData[i]<='9')||
    (lsData[i]>='a'&&lsData[i]<='f')||
    (lsData[i]>='A'&&lsData[i]<='F'))&&
    ((lsData[i+1]>='0'&&lsData[i+1]<='9')||
    (lsData[i+1]>='a'&&lsData[i+1]<='f')||
    (lsData[i+1]>='A'&&lsData[i+1]<='F'))
    )
    {
    if(lsData[i]>='0'&&lsData[i]<='9')
    lsReply[j] = lsData[i]-'0';
    if(lsData[i]>='a'&&lsData[i]<='f')
    lsReply[j] = lsData[i]-'a'+10;
    if(lsData[i]>='A'&&lsData[i]<='F')
    lsReply[j] = lsData[i]-'A'+10;
    lsReply[j]=(lsReply[j]<<4)&0xf0;
    if(lsData[i+1]>='0'&&lsData[i+1]<='9')
    lsReply[j] |= lsData[i+1]-'0';
    if(lsData[i+1]>='a'&&lsData[i+1]<='f')
    lsReply[j] |= lsData[i+1]-'a'+10;
    if(lsData[i+1]>='A'&&lsData[i+1]<='F')
    lsReply[j] |= lsData[i+1]-'A'+10;
    j++;
    }
    else
    break;
    }
    lsReply[j]=0x00;
    memcpy(sReply,lsReply,j+1);
    delete lsReply;
    delete lsData;
    return TRUE;
    }// 转换ASCII字符串到2字节16进制的字符串
    extern "C" BOOL pascal AsciitoHex(char* sAsc,int iLength,char* sReply)
    {
    int i,j=0;
    BYTE ch1,ch2;
    BYTE * lsData;
    BYTE * lsReply; if(sAsc==NULL)
    {
    return FALSE;
    }
    if(iLength>512)
    {
    return FALSE;
    }
    if(sReply==NULL)
    {
    return FALSE;
    } lsData=new BYTE[iLength];
    lsReply=new BYTE[iLength*2+1];
    memcpy(lsData,sAsc,iLength);
    for(i=0;i<iLength;i++)
    {
    ch1=lsData[i]>>4; //高四位
    ch2=lsData[i]&0x0f; //低四位
    lsReply[j++]=(ch1>=0&&ch1<=9)?(ch1+0x30):(ch1+0x37);
    lsReply[j++]=(ch2>=0&&ch2<=9)?(ch2+0x30):(ch2+0x37);
    }
    lsReply[j]=0x00;
    memcpy(sReply,lsReply,j+1);
    delete lsReply;
    delete lsData;
    return TRUE;
    }
    你先把“68CB0001685316”用HextoAscii转换一下,比如HextoAscii("68CB0001685316", TxData),在把TxData发送给串口应该就可以了,另一个函数是HextoAscii的逆运算