如何将byte []中的两个不同值存储为两个双精度数? C#

时间:2017-01-07 16:23:58

标签: c# byte

我从我的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 formatvalueOne上发生了一次崩溃:valueTwo

我认为我得到它是因为两个不同的值不被视为一个字符串?

那么我需要做什么才能在我的byte []中成功存储两个值来加倍?

1 个答案:

答案 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);