我正在通过串口从MCU读取一行。该行包含14个字符,以“OK”结尾。字符转换为int然后处理。问题是当值大于128时。对于大于128的值,值(int converted)保持为63.这是代码:
serialPort1.DiscardInBuffer();
serialPort1.DiscardOutBuffer();
serialPort1.Write("d");//request line from mcu
Thread.Sleep(100);
string line = serialPort1.ReadLine();
int p1_low = line[0];
int p1_high = line[1]*256;
int p1 = p1_low + (p1_high);
label1.Text = "Input Sensor: " + p1_low;
p1_low比p1_high变化很多,当大于128时,它会达到63值。问题出在哪里?
答案 0 :(得分:2)
将编码更改为
SerialPort1.Encoding = System.Text.Encoding.GetEncoding(28591)
您发现的默认编码会替换字节值> 127带有'?'。编码28591保留大于127的字节值。
您不需要将线程休眠为.ReadLine块。
答案 1 :(得分:0)
听起来你设置使用7个数据位。将数据位配置值更改为8,这样您就可以获得所有256个值。
参考:http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.databits.aspx