当前位置:编程学习 > C#/ASP.NET >>

急!通过C#读取C++程序发出的指令,读到的都是“?”

有个一c++写的程序,用来控制第三方设备,我想通过c#写程序,通过com口两台电脑连接起来,用哪个程序发命令,另一台电脑用C#程序接收,可是接收到的都是“?”,问题出在哪? 有什么需要注意的地方吗?
--------------------编程问答-------------------- 又不会发字符。都是二进的东西。 --------------------编程问答-------------------- 默认serialport类中使用的编码是ASCII的,对于大于127的值,转换成ASCII时都会变成?
你最好注意下,试着把Encoding转换成UTF8的。
PS:你一定要知道C++写的那个程序是用UTF8编码的还是ASCII编码的。虽然传输的都是二进制,但是将字符转换成二进制或者反过程的时候跟编码是有关的。MSDN中有关于serialport的编码的描述的。
SerialPort.Write 方法 (String) 中的“备注”中有如下描述:
当您想将字符串作为串行端口输出写入时,请使用此方法。

如果输入缓冲区中的字节数太多,并且 Handshake 设置为 XOnXOff,则 SerialPort 对象可能会在等待设备准备接受更多数据的过程中引发 TimeoutException。

默认情况下,SerialPort 使用 ASCIIEncoding 对字符进行编码。ASCIIEncoding 将所有大于 127 的字符编码为 (char)63 或“?”。若要支持该范围中的其他字符,请将 Encoding 设置为 UTF8Encoding、UTF32Encoding 或 UnicodeEncoding。
======================================================================================
你的C#程序用作接收端,所以你需要在将二进制(或者说十六进制)转换成字符时注意编码的问题,否则很容易造成乱码的情况。
希望能对你有所帮助。
PS:希望楼主平时多注意MSDN。 --------------------编程问答-------------------- 问题解决了,就是两个程序编码不同的原因,谢谢了啊 各位师傅。
不过还有一个问题 为什么com口在在两台电脑上通讯时 ,包括自己写的一个非常简答的程序,还有网上下载的端口测试程序。只有在com口针 2-3 3-2 连起来的时候 才能收发数据,如果将电脑所有的针连接起来,就收不到。这是为什么啊? --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,