2 xiaohuli1 xiaohuli1 于 2013.10.25 14:28 提问

MSComm控件串口接收数据存到txt中出现乱码

我在用C++做一个串口程序,用了MSComm控件,新手遇见了点问题,我用串口助手试了试我的程序,如果十六进制发送那么我接收的数据和串口助手发送的数据不一致,出现了乱码。我还想把我接收到的数据存储在txt文件中,可能是我数据类型没有转换对,txt文件里的接收数据也是乱码,不知道哪位能指点一下。
void CSendcomDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k,counts;
char *str;
CString inputdata;
CByteArray hexdata;
//BYTE rxdata[2048];
CString strtemp;

if(m_Com.GetCommEvent()==2) 
{             
    variant_inp=m_Com.GetInput();

    str=(char*)(unsigned char*)variant_inp.parray->pvData;

    safearray_inp=variant_inp;
    len=safearray_inp.GetOneDimSize();
    for(k=0;k<len;k++)
        safearray_inp.GetElement(&k,rxdata+k);
    for(k=0;k<len;k++) 
    {
        BYTE bt=*(char*)(rxdata+k); 
        strtemp.Format("%c",bt); 
        m_recv+=strtemp; 
    }
    FILE *pFile = fopen("data.txt","a");
    fwrite(str,1, strlen(str), pFile);
    fclose(pFile);
}
UpdateData(FALSE);

}

1个回答

WillMyPower
WillMyPower   2013.10.25 16:29
已采纳

乱码和串口传输没有关系,
要么你发送接收的数据不一致,要么两边的解码不一致

xiaohuli1
xiaohuli1 明白了,非常感谢
4 年多之前 回复
WillMyPower
WillMyPower 学会跟踪调试,这个问题很好查的,在for(k=0;k<len;k++) 打上断点,看看len是多少,看看rxdata内容
4 年多之前 回复
xiaohuli1
xiaohuli1 我刚学习不太懂解码,刚试了一下新的方法写,可是发送22334455,我的data.txt中是2??????希望能帮我看看怎么回事。for(k=0;k<len;k++) { BYTE bt=*(char*)(rxdata+k); strtemp.Format("%c",bt); m_recv+=strtemp; fwrite(strtemp,sizeof(strtemp),1,pFile); }
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
解决使用MSComm控件进行串口数据的接收数据不完整
void CSellWatchDlg::OnOnCommMscomm1(UINT nID) {  // TODO: Add your control notification handler code here  VARIANT variant_inp;    COleSafeArray safearray_inp;  BOOL b = FALSE;  LONG len=0;
MFC——VS中MSComm串口控件的导入和注意事项
(1)先下载一个文件,链接为:点击打开链接。压缩包中包含四个文件:MSCOMM.SRG、MSCOMM32.DEP、MSCOMM32.oca、mscomm32.ocx;解压后拷贝到:   C:\Windows\System32(WIN7系统);   C:\WINDOWS\system32(XP系统)。  注意:64位win7系统还需要将mscomm32.ocx文件复制到C:\Windows\SysW...
VFP利用MsComm32控件接收串口(COM)数据示列
VFP利用MsComm32控件接收串口(COM)数据示列
怎样把vc6的MSComm控件接受的数据实时的显示在编辑框,并把数据实时惠存txt文件中
怎样把vc6的MSComm控件接受的数据实时的显示在编辑框,并把数据实时存入txt文件中 我在做一个基于VC6的MSComm控件的电机上位机控制,数据帧格式采用9600bps,8位数据位,奇校验,1位停止位,下位机每次发送16位数据,(16位是分两次发送吗??),高两位代表指令,后14位代表实际的数据,例如“00”代表的是发送的是转速数据,后14位才是转速的实际值。我现在要用vc++6.0的MS
vc串口编程使用mscomm控件的,接受字符个数多余8个时,会重复进中断的OnCommMscomm()的处理对策
<br />在串口编程时,使用microsoft的mscomm控件,简单,实用,特别是对于一些异步处理的场合,使用控件的中断(消息映射),比较方便。<br />但是,在实际使用中,发现当接收的字符个数大于8个时,会重复进入中断处理函数,这种方式在某些场合使用会出现问题。<br />本文的目的就是提出一种解决方式,当接受的字符个数大于8个时,在一次中断处理函数中全部接收到这些字符串,而不用多次进入中断处理函数。<br /> <br />串口的控件初始化:<br /><br />m_ComPort.SetCom
vc++下MSComm控件的串口通信方法
转自:吉翔的博客   http://jixiang1119.blog.163.com/blog/static/2827097320091283321941/ 0       引言  随着计算机网络和多微机系统的广泛应用,接口通信技术日益成为当今一门非常重要的关键性技术。计算机与计算机以及其他设备的通信方式有串口通信,并口通信,USB通信和以太网通信等多种通信方式。尽管当今USB通信技术和以
解决VS2010使用mscomm控件无法接收数据的问题
如果你正在使用2010,并且想用mscomm控件,遇到如下问题,那你可以看看这篇文章: 1. 添加了mscomm控件以及对应的控件变量以后发现以前mscomm的成员函数,类似setsettings(),commport(),都不见了 2. 在类向导里添加了消息响应函数OnMscomm之后无法进入。 1. 首先,2010不支持mscomm控件,所以要注册mscomm控件,我看了两篇文章,都按照
wincc中的读写串口的控件及源码
在wincc中,是不能通过添加mscomm控件读写串口的,本控件实际上是使用了mscomm的自定义控件,实现了对串口的读写
完美的运用MSComm控件开发串口调试助手
作为一个MFC编程的菜鸟,以下内容着重在于自己对MScomm控件的使用流程梳理,以此以便自己忘了时有据可查,由于时间关系,未曾过多考虑代码布局,所以代码略显粗糙,忘各位海涵,若能理解使用即可。 一、进行MSComm32.OCX的注册 在win8.1的环境系统中一般情况下是没有MSComm32.OCX这个Active控件的,所以需要单独注册: 方案一: 安装VC++6.
Delphi+MSComm控件串口收发程序
//Delphi+MSComm控件串口收发程序 //HotPower@126.com procedure TForm1.FormCreate(Sender: TObject); begin if MSComm1.PortOpen then MSComm1.PortOpen := false;//关闭端口 MSComm1.CommPort := 2;//设置端口2 MSComm1.In