我正在从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
转换为int
。int.Parse
是其中之一,但与Convert.ToInt32
一样,如果字符串不是数字,则会引发异常
为了避免出现异常,您可以使用TryParse
TryParse
方法类似于Parse
或Convert.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(;在循环结束时解决了问题。