2017-01-07 6 views
-2

Ich sammle Daten von meinem BLE und ich empfange es nett. Aus meiner BLE ich meine zwei verschiedene Werte wie folgt an:Wie kann ich zwei verschiedene Werte in einem Byte [] in zwei Doubles speichern? C#

String valueOne = String(5.56749); 
String valueTwo = String(2.24759); 
BTLEserial.print(valueOne); 
BTLEserial.print(valueTwo); 

ich es wie zwei verschiedene Strings senden.

Und wenn ich es in meinem C# -Code erhalte, ist es ein Byte [].

Und so erhalte ich es erfolgreich mit meinem C# -Code.

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); 
}; 

Mit diesem Code jetzt habe ich die beiden Werte erhalten untereinander wie dies gerade gestapelt im Protokoll:

5.56749 
2.24759 

Und das ist vielleicht ein bisschen komisch, weil in GetString(result, 0, result.Length); Ich habe Index als 0 was ich dachte, würde nur den ersten Wert bekommen, also würde ich in meinem Fall nur 5.56749 im Protokoll bekommen, aber ich bekomme sie beide.

Was ich jetzt versuche zu tun ist, sie als einzigartige Doppel zu speichern. Ich habe mit so etwas wie dies begonnen:

double valueOne; 
double valueTwo; 

valueOne = Convert.ToDouble(str.Split(' ').First()); 
valueTwo = Convert.ToDouble (str.Split(' ').Last()); 

Aber ich bekomme einen Absturz: Input string was not in correct format sowohl auf valueOne und valueTwo.

Ich nehme an, dass ich es bekomme, weil die zwei verschiedenen Werte nicht als eine Zeichenfolge gesehen werden?

Also was muss ich tun, um erfolgreich zwei Werte in meinem Byte [] zu speichern, um zu verdoppeln?

+0

etwas mehr Code benötigen, Ihnen zu helfen, aber haben Sie versucht, die Fehlersuche und Inspektion der Wert von "str", wenn Sie versuchen, es in ein Double zu konvertieren. – Bauss

+0

Bitte lesen Sie [MCVE] Anleitung und [Bearbeiten] den Beitrag, um nicht verwandten Code zu entfernen und stattdessen Code, dass * zeigt nur das Problem *. I.e. mit hartkodierten Byte-Array oder einfach const String, der Wert zeigt, können Sie nicht zu doubles analysieren. Beachten Sie, dass der aktuelle Code darauf hinweist, dass es absolut kein "/" in der Zeichenkette gibt - also zu erwarten, dass 'Split' irgendetwas unternimmt ... –

+0

Ja, ich habe das versehentlich gepostet, sollte' ('') sein '. Ich werde versuchen, mehr Code hochzuladen, aber was genau sollte ich mehr zeigen? Weitere Informationen zum ble-Gerät und wie ich es sende oder zeige, wie ich die Verbindung mit dem ble bekomme? Ich habe nicht viel mehr Code zu zeigen, dass das mit dem Problem zusammenhängt Ich denke, – Martman

Antwort

1

Wenn Sie die Daten aus der BLE zu geändert „1 | value1“ und „2 | Wert2“ Sie könnten so:

 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); 
Verwandte Themen