2017-05-17 5 views
0

Ich arbeite an einer Android-App, die Daten im String-Format durch BLE empfängt. Diese Zeichenfolge enthält ADC-Werte im HEX-Format. Um Speicherplatz zu sparen, enthielt ich zwei Hexadezimalwerte pro Byte (zum Beispiel 0xED). Ich kann diese Werte jedoch nicht aus der Zeichenfolge abrufen. Also muss ich in der Lage sein, eine int[] von der Zeichenfolge zu bekommen, die jedes indizierte Zeichen in zwei teilt.Cast erweiterte Zeichen zu Int Java

Als jetzt habe ich versucht, charAt(index) zu bekommen, und dann Gießen char zu int. Dies funktioniert jedoch nur für ASCII-gültige Daten. Sobald die Daten für ein Zeichen über 127 hinausgehen, wird ein Standardwert für Ausnahmen zurückgegeben. Gibt es eine Möglichkeit, dies zu vermeiden?

Der folgende Code funktioniert für jeden Wert unter 127 in Ordnung, so brauche ich nur eine Lösung für die Werte über 127.

for (int i = 0; i < 119; i++) { 
 
      char charTemp1 = datastring.charAt(i); 
 
      int test = charTemp1 & 0xF0; 
 
      int test2 = charTemp1 & 0xF; 
 
      }

+1

[Parse] (https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt (java.lang.String, 20int%)), um sie mit ein Radix von 16 – litelite

+4

Bitte ein [mcve]. Zeigen Sie uns Beispielcode, der eine solche Zeichenfolge erstellt und wo Sie stecken geblieben sind. – GhostCat

+4

Benutzt keine Strings, um beliebige Bytes zu speichern. Das mag in C funktioniert haben, aber nicht hier. –

Antwort

0

Möglicherweise müssen Sie mehr darüber, wie Sie Ihre Eingabe erklären String-Format funktioniert. Sie zeigen 119 Zeichen für eine Zeichenfolge, die angeblich Paare von Hexadezimalziffern enthält, und ich verstehe das nicht. Beachten Sie unten, dass ich ein Beispiel im Code als testVector gebe. Wie unterscheidet sich deine Saite?

public class ParseInt 
{ 
    public static void main(String[] args) { 
     String testVector = "EDAB1234"; 
     System.out.println(Arrays.toString(parseInts(testVector))); 
    } 

    public static int[] parseInts(String hex) { 
     int[] retVal = new int[ hex.length()/2 ]; 
     for(int i = 0; i < hex.length()/2; i++) { 
     retVal[i] = Integer.parseInt(hex.substring(i*2, i*2+2), 16); 
     } 
     return retVal; 
    } 

} 
+0

Meine Zeichenfolge sieht aus wie "! Ce " oder 0x21 43 65 87 A9 CB ED 0F. Also gibt es 2 Hex-Werte pro Zeichen in der Zeichenfolge – Barrybas

+0

Und was soll die Ausgabe sein? Das sind keine Hexadezimalziffern. – markspace

+0

Ich möchte die einzelnen Hex-Werte trennen – Barrybas