在程序中,用串口API接收数据,能正确读取出数据,但用memcpy把接收到的BYTE类型的数据recvbuff拷贝到另一个BYTE变量pBuff中后,pBuff中的数据不对了查了一天多,目前仍未找出问题所在,求高手帮忙
拷贝部分的代码如下:  BYTE *pBuff = new BYTE[wCount+1];
  memset(pBuff,'\0',wCount+1);
memcpy(pBuff,recvbuff,wCount+1);

解决方案 »

  1.   

    memcpy(pBuff,recvbuff,wCount+1);
    应该是memcpy(pBuff,recvbuff,wCount);吧,你是直接看pBuff的值不对吗?那么memcpy时,recvbuff的值正确吗?代码能再全一点吗
      

  2.   


    recvbuff接收的数据是正确的,(在一个UI线程中实现串口API接收和发送数据的)调试的时候,发现pBuff的内存数据也是改变了的,
    但是我把通过消息数据传回主线程的时候,得到的数据,查看内存是对了,但显示,解析就与UI线程中的显示不一样,主线程中只能 显示一部分
      

  3.   

    http://hi.csdn.net/space-417397-do-album-picid-727154-goto-up.htmlhttp://hi.csdn.net/space-417397-do-album-picid-727158-goto-down.html这两张是调试时抓的图
      

  4.   

    内存拷贝后,如果调试显示结果一致,问题可能出在多线程上,memcpy这种非常底层的函数,一般不会出错。
      

  5.   

    被您说中了……就是在转换过程中,显示得不对,但是内存中的数据是对的以前也是这种方法读取API,能够接收成功,并能解析处理再入库
    可能出现的问题的是地方是:BYTE转换成CString的问题,目前没有明白道理呵呵……谢谢大家的帮助……
      

  6.   

    应该是BYTE数组中包含有0x00字符,转换成CString是不行的,0x00后的会自动被截掉。
      

  7.   


    我不知道原因是什么?因为在接收的线程中,将recvbuff(一个BYTE数组)转换成CString后,显示的内容是对的,但在主线程中,对于传递回的BYTE指针,用相同的方法时,不仅遇到0x00不会显示,而且能显示的个数很少……
      

  8.   

    你是用的UNICODE字符么,你转CString的时候变成UNICODE了
      

  9.   

    用str.Format("%02X ",recvbuff[i]);//(我要实现的是16进制显示)BYTE 转换成CString,这种方式对不
      

  10.   

    BYTE *pBuff = new BYTE[wCount+1];
       memset(pBuff,'\0',wCount+1);
    memcpy(pBuff,recvbuff,wCount+1);///字符串结束符也要占位置的
      

  11.   

    memcpy(pBuff,recvbuff,wCount+1);改为
    memcpy(pBuff,recvbuff,wCount);试试,可能是recvbuff中的内容太多,导致pBuff没有结束字符,也有可能是你的recvbuff没有结束字符