我从我的BLE收集数据,我收到的很好。从我的BLE中我发送了两个不同的值:
String valueOne = String(5.56749);
String valueTwo = String(2.24759);
BTLEserial.print(valueOne);
BTLEserial.print(valueTwo);
我发送它就像两个不同的字符串。
当我在C#代码中收到它时,它是一个byte []。
这就是我用C#代码成功接收它的方式。
RXcharacteristics.ValueUpdated += (sender, e) =>
{
var result = e.Characteristic.Value; //result is a System.Byte []
var str = Encoding.UTF8.GetString(result, 0, result.Length);
System.Diagnostics.Debug.WriteLine(str);
};
使用该代码,我现在将两个值叠加在彼此之下,就像在日志中一样:
5.56749
2.24759
这可能有点奇怪,因为在GetString(result, 0, result.Length);
我的索引为0,我认为只会得到第一个值所以在我的情况下我只会在日志中得到5.56749
但是我让他们两个。
我现在尝试将它们存储为唯一的双打。我从这样的事情开始:
double valueOne;
double valueTwo;
valueOne = Convert.ToDouble(str.Split(' ').First());
valueTwo = Convert.ToDouble (str.Split(' ').Last());
但我在Input string was not in correct format
和valueOne
上发生了一次崩溃:valueTwo
。
我认为我得到它是因为两个不同的值不被视为一个字符串?
那么我需要做什么才能在我的byte []中成功存储两个值来加倍?
答案 0 :(得分:1)
如果您将数据从BLE更改为" 1 | value1"和" 2 | value2"你可以用这个:
System.Diagnostics.Debug.WriteLine("Received: " + str);
String[] s = str.Split(new char[] { '|' });
int index = int.Parse(s[0]);
if (index == 1) {
valueOne = double.Parse(s[1], System.Globalization.CultureInfo.InvariantCulture);
}
else if (index == 2) {
valueTwo = double.Parse(s[1], System.Globalization.CultureInfo.InvariantCulture);
}
System.Diagnostics.Debug.WriteLine(valueOne);
System.Diagnostics.Debug.WriteLine(valueTwo);