图1:Unicode编码Demo工程图
看了看Windows C/C++ 核心编程,作者强烈推荐程序采用Unicode编码编程。于是稍微改写了CSerialPort类的源码,并实现了一个小的Unicode串口通信Demo。
开发工具为VC2010。
CSerialPort.cpp改写的主要内容为:
1,将char改为wchar_t,字符或字符串添加L,如’N’改为L’N’,”COM%d”改为L”COM%d”.
2,改变相关函数名,如sprintf改为 swprintf并添加一个缓冲区大小的参数。具体为:
sprintf(szPort, ,"COM%d",portnr);改为:swprintf(szPort,100, L"COM%d",portnr);//100代表szPort大小,防止缓冲区溢出。
Strcpy改为wcscpy_s,strlen改为wcslen等等。主要是Unicode支持和安全处理,去掉警告信息。
3.添加了memset(&comstat,0,sizeof(COMSTAT)); 初始化
核心代码:
1:具体界面如上图1,点击发送按钮后,发送6字节数据123456到串口。代码如下:
2:串口接收函数代码
显示的Display函数:
工程已上传,有兴趣的可以看下哈。
串口通讯中只有字节流的概念,没有字符的概念,更没有字符编码的概念。如何理解字节流、如何编码,是通讯双方约定协议的事,和串口通讯其实没有关系。
所以上位机发送的是Unicode编码,要求下位机(单片机或者其他)也采用Unicode解析,就是把收到的两个字节看做一个字节,可以丢弃第二个字节(高端)。
其实好像没啥大用,因为串口通信一般都是ASCII码通信,采用Unicode开销大(多发了一倍的无效数据),而且处理下位机麻烦。
贻笑大方了。。。。。。