我用函数写的串口通讯,现在要向下位机发送十六进制数据,比如发送:"112233445566AAFF"
该怎么实现!要按十六进制发送,请赐教!

解决方案 »

  1.   

    字符串? 那就Format("%x",xxx) ;
      

  2.   

    将输入的数据(ASCII)编码转换成HEX编码就可以了,如你举例:
    112233445566AAFF可以分解为:
    11,22,33,44,55,66,aa,ff等字节,可以用sscanf()将其转换成HEX值:
    char buf[]="11,22,33,44,55,66,aa,ff";
    int dat[16];
    sscanf(buf,"%x,%x,%x,%x,%x,%x,%x,%x",&dat[0],&dat[1],...);
    BYTE bdt[16];
    bdt[0]=BYTE(0xff&dat[0]);
    bdt[1]=BYTE(0xff&dat[1]);
    ...
    将bdt发送出去就可以了,
    声明一点:计算机可以处理的数据只有BIN,HEX,DEC等都是为了方便阅读才使用的。
      

  3.   

    下面是我想串口发送命令的一个写串口的封装和调用
    ///////////////////////////////////////////////////////////////////////////
    int WriteCom(HANDLE hComm, BYTE Outbuff[], int size, int bWrite[])
    {
    DWORD nBytesWrite,endtime,lrc;
    static OVERLAPPED ol;
    DWORD dwErrorMask,dwError;
    COMSTAT comstat;
    ol.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
    ol.Offset=0;              
    ol.OffsetHigh=0;
    ol.hEvent=NULL;               ///标识事件,数据传送完成时,将它设为信号状态
    ClearCommError(hComm,&dwErrorMask,&comstat);
        if(!WriteFile(hComm,Outbuff,size,&nBytesWrite,&ol)) 
    {
    if((lrc=GetLastError())==ERROR_IO_PENDING)
    {
    endtime=GetTickCount()+1000;
    while(!GetOverlappedResult(hComm,&ol,&nBytesWrite,FALSE))
    {   
    dwError=GetLastError();
    if(GetTickCount()>endtime)
    {
    AfxMessageBox("写串口时间过长,目前串口发送缓冲区中的数据数目为空");
    break;
    }
    if(dwError=ERROR_IO_INCOMPLETE) 
    continue;          //未完全读完时的正常返回结果 
    else
    {
    // 发生错误,尝试恢复!
    ClearCommError(hComm,&dwError,&comstat);
    break;
    }
    }
    }   
    }
        FlushFileBuffers(hComm);
    PurgeComm(hComm,PURGE_TXCLEAR);                ///?
    bWrite=0;
    return 1;
    }调用:
    int  BWRITE[2];
    BYTE m_OutBuff[10]={0xeb,0x90,0xeb,0x90,0x00,0x08,0x00,0x15,m_Crc};
    int SIZE=sizeof(m_OutBuff);
    WriteCom(m_hCom,m_OutBuff,SIZE,BWRITE); 
    m_hCom是打开的串口的句柄