сравнить шестнадцатеричные значения Java - PullRequest
0 голосов
/ 06 апреля 2009

Дубликат: Сравнение шестнадцатеричных и десятичных значений

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

Вот часть кода:

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

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 06 апреля 2009

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

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

1 голос
/ 06 апреля 2009

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

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

...