免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2618 | 回复: 6
打印 上一主题 下一主题

[C++] 显示出的是乱码,怎么解决? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-04 11:07 |只看该作者 |倒序浏览
我的电脑的com串口通过485连接了一个网络视频服务器,现在我通过如下代码接收到com串口缓冲区的数据。接收的数据我写入到c:\text.txt文件中,但是接收到的是乱码。我想问题是接收到的数据没有得到数据转换,请问,怎么转换呀,我觉得不单单是一个转换函数就可以搞定的吧!


  1. void CComDlg::OnReceive()
  2. {
  3.         // TODO: Add your control notification handler code here
  4.         OVERLAPPED m_osRead;
  5.         memset(&m_osRead,0,sizeof(OVERLAPPED));
  6.         m_osRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

  7.         COMSTAT ComStat;
  8.         DWORD dwErrorFlags;
  9.        
  10.         char str[512];
  11.         memset(str,0,512);
  12.         DWORD dwBytesRead=512;//读取的字节数
  13.         BOOL bReadStat;

  14.         ClearCommError(hCom,&dwErrorFlags,&ComStat);

  15.         dwBytesRead=min(dwBytesRead, (DWORD)ComStat.cbInQue);

  16.         bReadStat=ReadFile(hCom,str,dwBytesRead,&dwBytesRead,&m_osRead);

  17.         if(!bReadStat)
  18.         {
  19.                 if(GetLastError()==ERROR_IO_PENDING)
  20.             //GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读操作
  21.                 {
  22.                         WaitForSingleObject(m_osRead.hEvent,2000);
  23.                     //使用WaitForSingleObject函数等待,直到读操作完成或延时已达到2秒钟
  24.                     //当串口读操作进行完毕后,m_osRead的hEvent事件会变为有信号
  25.                 }
  26.         }
  27.                         FILE* stream = fopen("C:\\text.txt", "a+");
  28.                         fwrite(str, 1, sizeof(str), stream);
  29.                         fclose(stream);

  30.         PurgeComm(hCom, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
  31.         UpdateData(FALSE);
  32. }


复制代码

论坛徽章:
0
2 [报告]
发表于 2008-06-04 11:44 |只看该作者
大伙帮帮忙吧!Waiting online

论坛徽章:
0
3 [报告]
发表于 2008-06-04 12:06 |只看该作者
com口似乎要设置波特率

其他问题我想不到了

PS:我没有实践过

论坛徽章:
0
4 [报告]
发表于 2008-06-04 14:46 |只看该作者
波特率我在初始化代码中已经设置过了。这跟出现乱码没有关系的。
我试图用 fprintf(stream,"%x",str)替代fwrite(str, 1, sizeof(str), stream);
不过结果还是乱码。

论坛徽章:
0
5 [报告]
发表于 2008-06-04 17:27 |只看该作者
网络视频,那不是二进制的吗,二进制跟乱码有关系吗。

论坛徽章:
0
6 [报告]
发表于 2008-06-04 17:29 |只看该作者
波特率不一致??

论坛徽章:
0
7 [报告]
发表于 2008-06-05 15:07 |只看该作者
我设置的波特率是一致的。程序和服务器设置是一样的。38400,19200,14400,9600。它们这几个我全试过了,均出现不同的乱码。上午我感觉是否超时。但还是一样的结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP