将串行端口的字符串数据解析为整数



我正在从Arduino Nano(电位计的模拟输入(向C#程序发送串行数据。它在控制台上显示得很好,但我需要通过vJoy使用数字来控制操纵杆。我需要将字符串(例如"932"(转换为整数。我不能简单地使用int.Parse(string),因为它说:

输入字符串的格式不正确。

static void Main(string[] args)
{
_serialPort = new SerialPort();
_serialPort.PortName = "COM9";
_serialPort.BaudRate = 9600;
_serialPort.Open();
while (true)
{
string a = _serialPort.ReadExisting();
Console.Write(a);
}
}

它似乎在每次通过时都会发送一个新行命令,因为使用Console.Write是在新行上。如果我们可以完全剥离字符串,那么解析可能会起作用。

有几种方法可以将string转换为intint.Parse是其中之一,但与Convert.ToInt32一样,如果字符串不是数字,则会引发异常

为了避免出现异常,您可以使用TryParse

TryParse方法类似于ParseConvert.ToInt32方法,只是TryParse方法在转换失败时不会抛出异常。

不要忘记清理你的字符串

int portNum = 0;
string yourPortStringFormatted = Regex.Replace(yourPortString , @"t|n|r", "");
bool isSuccees= Int32.TryParse(string.IsNullOrEmpty(yourPortStringFormatted) ? "0" : yourPortStringFormatted , out portNum );

发现问题。arduino发送串行数据的速度太快。添加延迟(100(;在循环结束时解决了问题。

相关内容

最新更新