У меня есть текстовый файл, который содержит заголовки "Захваченные сетевые пакеты" как шестнадцатеричные значения, такие как...
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++ намного лучше) Спасибо заранее.
Вот пример кода. Пожалуйста, оптимизируйте для использования в режиме реального времени.
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();
}
Попробуйте Long.parseLong("<hex string>", 16);
для преобразования шестнадцатеричной строки в long
значение.
Integer.parseInt("hexstring",16)
данные строки в этом случае не могут быть выше, чем 255.
Попробуй это:
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?*/)));
}