2015-12-20 3 views
3

Я пытаюсь понять некоторые основы, я пытаюсь читать двоичный файл с помощью Java, в этом случае это не имеет значения, но может помочь в подходе, я думаю , Итак, я знаю, что первые четыре байта файла имеют значение 0x9AA2D903. Но, когда я его читаю, они имеют «обратный» порядок, например: 03 D9 A2 9A (03 - первый байт, D9 - второй и т. Д.).Сравните данное значение с первым байтом файла

Что мне нужно сделать, чтобы сравнить значение 0x9AA2D903 и выход, который я получаю? Во-первых, это означает получить массив из этих 4 байтов, затем перевернуть их и преобразовать в строку. Но это выглядит ужасно.

Если бы вы могли указать на некоторую литературу, это было бы здорово.

код:

Path path = Paths.get(Utils.getResourseURI("Demo.kdbx")); 

try { 
    FileInputStream fin = new FileInputStream(path.toString()); 
      } 
    int len; 
    byte bytes[] = new byte[16]; 

    do { 
     len = fin.read(bytes); 
     for (int j = 0; j < len; j++) 
      System.out.printf("%02d\n", bytes[j]); 

    } while (len != -1); 
} 

ответ

3

Я не могу комментировать, но вы должны принять посмотрите на this SO post.

Похоже, что ваш файл отличается от Endian, чем то, что вы читаете. Например. файл может быть Little Endian, пока вы читаете Big Endian. Поэтому вместо того, чтобы пытаться сравнить значения, а затем изменить порядок, было бы лучше просто прочитать его в желаемом Endian.

1

Проблема у Вас есть это с Endian-Несс исходных данных

http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

Некоторые системы записи двоичных данных в обратном порядке, и это должно быть обработано в все, что читает двоичные данные.

UNIX и сети используют Big Endian.

Процессор Intel x86 и x86-64 процессоров серии используют формат Little Endian

Этот SO ответ объясняет, как вы можете прочитать: https://stackoverflow.com/a/3438744/5672880

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