VC中串口中,如何通过
CString cswrite ="02 16 03 02 4D 53 30 34 32 32 30 30 30 88 88 03 02 09 03";
WriteFile(hdcom,cswrite,cswrite.GetLength(),&wCount,NULL);
向串口中写入数据时,写入的是十六进制搂数据?cswrite 如何转换为十六进制的?然后写入到串口中去? 

解决方案 »

  1.   

    好像我记得是:CString::Format("%x",10进制数)
      

  2.   

    用sscanf(cswrite.GetBuffer(),"%x",....)
      

  3.   

    WriteFile是将给定的缓冲区里的数据当成字节串写入设备里。
    如果你给定的是一个字符串,那么它就把字符串中的每个字符的ASCII码当成字节流。
    而在楼主的例子中,如果楼主想把cswrite中每个空格隔开的字符串当成一个整数,而不是字符串。
    楼主需要先写一个解析函数,以空格为边界,将字符串解析成整数串。
      

  4.   

    不管发送的十进制还是十六进制的数据,值是一样的,只是表示方式不同,发送的都是字节序列:

            char num[3];
    CString cswrite="02 16 03 02 4D 53 30 34 32 32 30 30 30 88 88 03 02 09 03"; ;
    int DataLen = cswrite.GetLength();
    BYTE * SendData = new BYTE[(DataLen+1)/2];
    for(int i = 0; i < cswrite.GetLength(); i++)
    {
    if(cswrite.GetAt(i) == ' ')
    cswrite.Delete(i);
    }
    for(i = 0; i < cswrite.GetLength(); i+=2)
    {
    num[0] = cswrite.GetAt(i);
    num[1] = cswrite.GetAt(i+1);
    num[2] = '\0';
    SendData[i/2] =  atoi(num);
    }
    DataLen = i/2;
            WriteFile(hdcom,SendData,DataLen,&wCount,NULL); 
      

  5.   

    1. 写入的肯定不是十六进制,是字符串
    2. 用sscanf(cswrite.GetBuffer(),"%x",....)