5970|14

90

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE下串口通信问题 [复制链接]

我用了EVC高级编程里面的串口通讯类
接收数据时字符变量可以正常显示,我想接收16进制的数据应该怎么显示。
在发送数据的时候,我在电脑上用ASCII码显示数据时,只能显示第一个字符,用HEX编码显示时能都显示出来但是在每个两个字符中间都加了00,如发送1234时,ASCII码显示只有一个1,HEX码却显示3100320033003400,

下面是部分代码:


发送:
void CSeriesSampleDlg::OnBtnsend()
{
        UpdateData(TRUE);
    BYTE * buf;
        int bufLen = m_strSend.GetLength()*2;
        buf = new BYTE(bufLen);
        CopyMemory(buf,m_strSend.GetBuffer(m_strSend.GetLength()),bufLen);
        if (!m_ceSeries.WritePort(buf,bufLen))
        {
                AfxMessageBox(L"写入失败");
        }
}

接收:
void CSeriesSampleDlg::OnSeriesRead(CWnd* pWnd,BYTE* buf,int bufLen)
{
        CSeriesSampleDlg *pDlg = (CSeriesSampleDlg *)pWnd;
        CEdit * pEdit;
        pEdit = (CEdit*)pDlg->GetDlgItem(IDC_EDTRECV);

        CString strRecv((char*)buf);
        CString strOld;
        pEdit->GetWindowText(strOld);
        pEdit->SetWindowText(strOld + strRecv);
   
        delete[] buf;
}
此帖出自WindowsCE论坛

最新回复

学习 收藏   详情 回复 发表于 2009-8-1 16:06
点赞 关注
 

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
注意UNICODE字符。
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
要怎么修改才能收发16进制的数据啊!!
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
能说的详细点吗?

有相关的文章也行。。。。。
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

5
 
CE系统默认的字符串是Unicode格式,一个字符占用两个字节,高字节为零。但串口是以ASCII处理字符串的。

通过串口发送前,最好将Unicode转成ASCII
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
俺用C#开发,使用serialport类。
private   void   SendBytesData(SerialPort   serialPort)
{
    byte[]   bytesSend="System".Text.Encoding.Default.GetBytes(txtSend.Text   );
    serialPort.Write(bytesSend,   0,   bytesSend.Length);
}
此帖出自WindowsCE论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

7
 
提醒一下楼主:


什么叫做字符串?你真的明白了吗?
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

8
 
CString strRecv((char*)buf);
应该是这儿有问题,但是应该怎么把buf里面的数据转换成16进制的数据读出来呢?

刚开始学不太懂!
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 hdzjw 的回复:
CString strRecv((char*)buf);
应该是这儿有问题,但是应该怎么把buf里面的数据转换成16进制的数据读出来呢?

刚开始学不太懂!



你发送和接收都是正确的,没有错误!


错误的是你的理解!


可以先看看:

1、什么叫做 字符串?

2、UNICODE 与 ANSI 的区别。
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
lz的程序就差那么一点了。楼主可能看了UNICODE ANSI了,就不知怎么转换吧。
MultiByteToWideChar()这个函数就是实现这个功能的,具体自己看吧
此帖出自WindowsCE论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 
OK
读出数据已经好了
能显示16进制文件了
void CComtestDlg::OnSeriesRead(CWnd* pWnd,BYTE* buf,int bufLen)
{
        CComtestDlg *pDlg = (CComtestDlg *)pWnd;
        CEdit * pEdit;
        pEdit = (CEdit*)pDlg->GetDlgItem(IDC_EDIT_RECV);



         CString sResult;
    for(int i=0;i         {
        CString s;
        s.Format(_T("%2.2X"),buf);
        sResult+=s;
    }

        CString strOld;
        pEdit->GetWindowText(strOld);
        pEdit->SetWindowText(strOld + sResult);
   
        delete[] buf;

}
谢谢 zaodt
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

12
 
改好发数据之后散分
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 
那就等着早点散分,接一点点分 ∧_∧
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

14
 
Unicode和ANSIC之间的转换可以用这两个API来转:
wcstombs
mbstowcs
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
学习 收藏
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表