Читайте Java как Hex - PullRequest
       0

Читайте Java как Hex

1 голос
/ 16 января 2011

Я пытался решить эту проблему, но продолжаю придумывать вещи, которые не помогают, я уверен, что это легко (если вы знаете, как;))

То, что я хотел бы сделать, это прочитать в файле, используя поток байтов, как показано ниже:

while((read = in.read()) != -1){

       //code removed to save space

       Integer.toHexString(read);
System.out.println(read);

}

Когда он выводит на экран шестнадцатеричный код, он печатает точные числа, например 31 13 12 0

но когда дело доходит до шестнадцатеричного кода, который должен быть 01 31, он напечатает 0 131. Я хочу прочитать его в переменной, как вы видели бы в шестнадцатеричном редакторе, т.е. для сканирования всего файла и поиска шаблонов, которые я знаю, как это сделать, я просто застрял на этом: /

так что вкратце мне нужно, чтобы переменная содержала два шестнадцатеричных символа, т.е. int temp = 01, а не int temp = 0, я надеюсь, что все это имеет смысл, я немного запуталась, так как сейчас 3 часа утра

Если кто-нибудь знает, как это сделать, я был бы очень признателен, p.s спасибо за помощь заранее, этот сайт сэкономил мне массу исследований и многому научился!

Большое спасибо.

Ответы [ 4 ]

5 голосов
/ 16 января 2011

Этот метод:

public static void printHexStream(final InputStream inputStream, final int numberOfColumns) throws IOException{
    long streamPtr=0;
    while (inputStream.available() > 0) { 
        final long col = streamPtr++ % numberOfColumns;
        System.out.printf("%02x ",inputStream.read());
        if (col == (numberOfColumns-1)) {
            System.out.printf("\n");
        }
    }
}

выведет что-то вроде этого:

40 32 38 00 5f 57 69 64 65 43 
68 61 72 54 6f 4d 75 6c 74 69 
42 79 74 65 40 33 32 00 5f 5f 
69 6d 70 5f 5f 44 65 6c 65 74 
65 46 69 6c 65 41 40 34 00 5f 
53 65 74 46 69 6c 65 50 6f 69 
6e 74 65 72 40 31 36 00 5f 5f 
69 6d 70 5f 5f 47 65 74 54 65 
6d 70 50 61 74 68 41 40 38 00 

Это то, что вы ищете?

1 голос
/ 02 сентября 2015
import org.apache.commons.io.IOUtils;
import org.apache.commons.codec.binary.Hex;

InputStream is = new FileInputStream(new File("c:/file.txt"));
String hexString = Hex.encodeHexString(IOUtils.toByteArray(is));

В Java 7 вы можете прочитать байтовый массив непосредственно из файла, как показано ниже:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;

Path path = Paths.get("path/to/file");
byte[] data = Files.readAllBytes(path)     
1 голос
/ 24 января 2011

Привет всем, кто написалмного за вашу помощь, хотя!

1 голос
/ 16 января 2011

Я думаю, что вы ищете форматировщик. Попробуйте:

Formatter formatter = new Formatter();
formatter.format("%02x", your_int);
System.out.println(formatter.toString());

Это делает то, что вы ищете? Ваш вопрос был не совсем ясен (и я думаю, что вы удалили слишком много кода из своего фрагмента).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...