C# 解析字母C中的数字数据

C# 解析字母C中的数字数据,c#,parsing,arduino,C#,Parsing,Arduino,我试图解析我从我创建的arduino机器人获得的数据。我目前已经启动并运行了串行程序,我能够监控计算机发送和接收的数据 我试图从机器人那里获得的数据包括:速度、距离和航向。从arduino发送的数据是浮点数 我使用单个字符表示S、R或H接收的数据。例如: R150.6 这表示这是范围数据,150.6将是更新程序的新范围 我有点被困在试图找出用c解析的最佳方法,因为这是我的第一个c程序 我已尝试使用类似的代码: if (RxString[0] == 'R') Range =

我试图解析我从我创建的arduino机器人获得的数据。我目前已经启动并运行了串行程序,我能够监控计算机发送和接收的数据

我试图从机器人那里获得的数据包括:速度、距离和航向。从arduino发送的数据是浮点数

我使用单个字符表示S、R或H接收的数据。例如: R150.6

这表示这是范围数据,150.6将是更新程序的新范围

我有点被困在试图找出用c解析的最佳方法,因为这是我的第一个c程序

我已尝试使用类似的代码:

if (RxString[0] == 'R')
            Range = double.Parse(RxString);
我在网站上读到了使用正则表达式的文章,但是我很难弄明白如何将它合并到我的代码中

这是我用来指导的链接:


你快到了。如果总是以单个字母开头,请尝试Range=double.ParseRxString.Substring1。它将从上的第二个字符开始读取。

您就快到了。如果总是以单个字母开头,请尝试Range=double.ParseRxString.Substring1。它将从上的第二个字符读取。

我可以使用正则表达式查找双精度:

\d+([,\.]\d+)?
使用:

Regex re = Regex.Match("R1.23", "\d+([,\.]\d+)?");
if (re.Success)
{
     double @double = Convert.ToDouble(re.Value, System.Globalization.CultureInfo.InvariantCulture);
}

如果您的字母在字符串中迁移或添加其他符号,则可以从字符串中获取第一个小数点

我可以使用正则表达式查找双精度:

\d+([,\.]\d+)?
使用:

Regex re = Regex.Match("R1.23", "\d+([,\.]\d+)?");
if (re.Success)
{
     double @double = Convert.ToDouble(re.Value, System.Globalization.CultureInfo.InvariantCulture);
}

如果您的字母以字符串形式迁移或添加其他符号,则可以从字符串中获取第一个小数点

因为您知道返回数据的格式,所以可以尝试以下方法

data = RxString.SubString(0,1);
value = RxString.SubString(1, RxString.Length-1);

if(data == "R")
  range = double.Parse(value);

因为您知道返回数据的格式,所以可以尝试以下方法

data = RxString.SubString(0,1);
value = RxString.SubString(1, RxString.Length-1);

if(data == "R")
  range = double.Parse(value);

您的示例是调用double.ParseR150.6。在尝试解析数字之前,您至少需要删除第一个数字。您的示例是调用double.ParseR150.6。你至少会想要,在尝试解析数字之前删除第一个数字。这很好。但是在本例中,正则表达式是从字符串中删除字符的一种非常昂贵的方法。这很好。但是在本例中,正则表达式是从字符串中删除字符的一种非常昂贵的方法。我按照您的说明输入了它,然而,我发现我的数字在小数点处被分开了。一行是147,下一行是0。我不知道这是否与我的解析有关,或者我正在使用命令将double转换为字符串。这是我正在使用的命令:textBox1.AppendTextRange.ToString;我是按照你说的那样输入的,但是我发现我的数字在小数点处被分开了。一行是147,下一行是0。我不知道这是否与我的解析有关,或者我正在使用命令将double转换为字符串。这是我正在使用的命令:textBox1.AppendTextRange.ToString;