【发布时间】:2019-10-22 00:20:51
【问题描述】:
我想创建一个可以打开二进制文件的应用程序,读取和编辑十进制值的内容,然后将其保存回二进制文件。
我要打开的这个文件有多个以 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[] 转换为十进制值的第一次尝试:
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]));
我被困在这里,需要一些指导。我还必须说我是编程新手。 谢谢
【问题讨论】:
标签: java android arrays file binary