2009-04-06 2 views
0

Дубликат:Compare hexadecimal and decimal valuesсравнить шестнадцатеричные значения Java

Я реализует протокол X-модема в Java, я чтение SerialPort и хранение в байтовый массив размером 1024. Затем я преобразованные данные в строку я 'получаю 133 байта в пакете, проблема в том, что я не могу сравнивать шестнадцатеричное значение в строке, а также в bytearray. Я должен найти SOH, т. Е. 0x01,EOT=0x02, но я не могу понять, как это сделать.

Вот часть 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)); 
    } 
    } 
} 

Спасибо заранее.

+0

Два человека зафиксировали форматирование, и вы продолжаете вставлять исправленный (?) Код без форматирования, разрушая их усилия. Вы должны попробовать и посмотреть, что значки над текстовой областью сделаны для ... – PhiLho

ответ

1

Не используйте String/char при обработке двоичных данных. Вместо этого используйте byte[]/byte. Исправьте это, прежде чем пытаться исправить любые другие ошибки.

char - это 16-разрядное значение в Java, это не то же самое, что и C char (который определен как байт). Самое близкое к C char в Java - это byte (который подписан, хотя).

1

Вы сравниваете байты со строками - это Bad Thing, поскольку вы не знаете, какую кодировку использует Java, чтобы преобразовать данный байт в текстовое представление.

Используйте ByteBuffer и делайте сравнения между необработанными байтами при их чтении.

Смежные вопросы