Я хочу создать приложение, которое может открывать двоичный файл, читать и редактировать его содержимое в десятичных значениях, а затем сохранять его обратно в двоичный файл.
Этот файл, который я хочу открыть, имеет несколько параметров, записанных в 2 байта. например 00 06 00 50 01 AB = 6, 80, 427
Пока мне удалось открыть файл bin, поместить все данные из файла в byte[]
.
Вот код для открытия и чтения файла:
String path = getFilesDir().getAbsolutePath();
File file = new File(path + "/file.bin");
int size = (int) file.length();
byte[] bytes = new byte[size];
FileInputStream fis = new FileInputStream(file);
try {
fis.read(bytes);
...
} finally {
fis.close();
}
Вот первая попытка преобразовать byte[]
в значения deciaml:
for (int i = 0; i < size / 2; i = i + 2) {
intArray[i] = ((bytes[i] & 0xff) << 8) | (bytes[i + 1] & 0xff);
}
Но в этом коде только каждое второе значение является правильным. Это показывает 6,0,80,0,1
и должно быть 6,80,1
.
Вторая идея состояла в том, чтобы преобразовать byte[]
в String[]
, а затем в, например, int[]
но это не работает, как задумано. В этом фрагменте я не анализировал весь массив, а только hexArray[4]
, который был 50
в шестнадцатеричном и 80
в декабре, но результат был 50
.
for (int i = 0; i < size; i = i + 2) {
num1 = String.format("%02X", bytes[i] & 0xFF);
num2 = String.format("%02X", bytes[i + 1] & 0xFF);
String twoByte = num1 + num2;
hexArrayWithNull[i] = twoByte;
}
String[] hexArray = Arrays.stream(hexArrayWithNull).filter(Objects::nonNull).toArray(String[]::new);
num = String.format("%d", Integer.parseInt(hexArray[4]));
Я застрял здесь и мне нужно руководство. Я должен также сказать, что я новичок в программировании.
Спасибо