Как получить символы для строки в Java?

1

У меня есть текстовый файл, который содержит заголовки "Захваченные сетевые пакеты" как шестнадцатеричные значения, такие как...

FC-C8-97-62-88-5F-74-DE-2B-C8-C7-E5-08-00-45-00-00-28-4E-C4-40-00-80-06-BD-65-C0-A8-01-03-AD-C2-7F-38-C9-96-01-BB-F8-01-7F-5F-B6-8A-15-22-50-10-40-42-72-8C-00-00.

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

InputStream input = new FileInputStream("data.txt");
OutputStream output = new FileOutputStream ("converteddata.txt");
int data = input.read();
while (data != -1) 
{
  char ch = (char) data;
  output.write(ch);
  data=input.read(); 
} 
input.close(); 
output.close();

Теперь, моя проблема... как получить каждую шестнадцатеричную строку, которая имела бы символы "2".? (например, "AD" или 5F и т.д., чтобы преобразовать их в десятичные значения).

Я знаю, что C++ имеет функцию "fgetc()" Нет...? Мне нужно подобное решение. Любой может предложить хороший способ...? (Извините, я новичок в Java, но знаю C++ намного лучше) Спасибо заранее.

Теги:
string
char

3 ответа

0
Лучший ответ

Вот пример кода. Пожалуйста, оптимизируйте для использования в режиме реального времени.

public static void main(String[] args) throws IOException {
        OutputStream output = new FileOutputStream ("converteddata.txt");
        BufferedReader br = new BufferedReader(new FileReader(new File("data.txt")));
        String r = null;
        while((r=br.readLine())!=null) {
            String [] str = r.split("-");
            for (String string : str) {
                Long l = Long.parseLong(string.trim(), 16);
                output.write(String.valueOf(l).getBytes());
                output.write("\n".getBytes());
            }

        }
        br.close(); 
        output.close();

    }
  • 0
    Спасибо, сэр ... Но мы могли бы оставить знак дефиса "-", не разделяя его? Потому что после того, как я выполнил, строка стала такой ... 2522001519813695116222432001992298069004182199640128617511719216813
  • 0
    Конечно .. output.write (String.valueOf (l) .getBytes ()); output.write ( "-" GetBytes ());
Показать ещё 1 комментарий
1

Попробуйте Long.parseLong("<hex string>", 16); для преобразования шестнадцатеричной строки в long значение.

  • 0
    Почему бы не Integer.parseInt("hexstring",16) данные строки в этом случае не могут быть выше, чем 255.
  • 0
    @kai оба сработают, и в этом случае вы правы, что строки не могут быть выше 255, но для тех, кто может анализировать большие шестнадцатеричные строки, я чувствовал, что это будет более универсальным и пригодным для использования. Спасибо за хедз-ап!
Показать ещё 1 комментарий
1

Попробуй это:

String strHex = "FC-C8-97-62-88-5F-74-DE-2B-C8-C7-E5-08-00-45-00-00-28-4E-C4-40-00-80-06-BD-65-C0-A8-01-03-AD-C2-7F-38-C9-96-01-BB-F8-01-7F-5F-B6-8A-15-22-50-10-40-42-72-8C-00-00";

String[] hexParts = strHex.split("-");


for (String myStr : hexParts) {

  // System.out.println(toHex(myStr));
   System.out.println(toDecimal(myStr));
}


// getting For Decimal values from Hex string
public int toDecimal(String str){
    return Integer.parseInt(str.trim(), 16 );
}

// getting For Hex values
public String toHex(String arg) {
    return String.format("%x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/)));
}
  • 0
    Я снова отредактировал ответ для десятичных значений.
  • 0
    Это также работает сэр ... Но я только что инициализировал "String strHex" как значение NULL ... потому что это был "PACKET-HEADER", который встречается в этом файле несколько раз. Спасибо..!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню