2009-04-06 8 views
0

Duplizieren:Compare hexadecimal and decimal valuesvergleichen Hexadezimalwerte java

ich x-Modem-Protokoll in Java-Implementierung, ich Serialport zu lesen und in Byte-Array der Größe Speicherung 1024. habe ich dann in einen String konvertiert Daten I Ich bekomme 133 Bytes in einem Paket, Problem ist, ich bin nicht erlaubt, Hexadezimalwert in Zeichenfolge und auch in Bytearray zu vergleichen. Ich muss SOH finden, d. H. 0x01,EOT=0x02 in Daten, aber ich kann nicht verstehen, wie es geht.

Hier ist ein Teil von theCode:

char SOH=0X01; 
public void readResponse() 
{ 
    byte[] buffer = new byte[1024]; 
    int len = -1; 
    String data; 
    try 
    { 
    while ((len = this.getIn().read(buffer)) > -1) 
    { 
    data = new String(buffer,0,len); 
    time = System.currentTimeMillis(); 
    data = new String(buffer, 0, len); 
    System.out.println("Data length is "+data.length()); 
    System.out.println(data); 
    for(int i=0;i<carray.length;i++) 
    { 
    if(data.CharAt(i)==SOH) 
    { 
     System.out.println("SOH["+i+"]"+data.CharAt(i)); 
    } 
    } 
} 

Vielen Dank im Voraus.

+0

Zwei Personen haben die Formatierung korrigiert und Sie fügen korrigierten (?) Code ohne Formatierung ein und ruinieren ihre Bemühungen. Sie sollten versuchen zu sehen, was die Symbole über dem Textbereich sind für ... – PhiLho

Antwort

1

Verwenden Sie nicht String/char beim Umgang mit Binärdaten. Verwenden Sie stattdessen byte[]/byte. Beheben Sie das, bevor Sie versuchen, andere Fehler zu beheben.

char ist ein 16-Bit-Wert in Java, es ist nicht das gleiche wie die C char (die definiert ist, um ein Byte zu sein). Die nächste Sache zu einer C char in Java ist die byte (die unterzeichnet ist, 'obwohl).

1

Sie vergleichen Bytes mit Strings - das ist eine schlechte Sache, da Sie nicht wissen, welche Kodierung Java verwendet, um ein gegebenes Byte in eine Textdarstellung umzuwandeln.

Verwenden Sie einen ByteBuffer und vergleichen Sie die Rohbytes, während sie gelesen werden.