Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中编辑二进制文件?_Java_Android_Arrays_File_Binary - Fatal编程技术网

Java 如何在Android中编辑二进制文件?

Java 如何在Android中编辑二进制文件?,java,android,arrays,file,binary,Java,Android,Arrays,File,Binary,我想创建一个应用程序,可以打开二进制文件,读取和编辑十进制值的内容,然后将其保存回二进制文件 我要打开的这个文件有两个字节的多个参数。e、 g.00 06 00 50 01 AB=6,80,427 到目前为止,我设法打开了bin文件,将文件中的所有数据放入字节[] 以下是打开和读取文件的代码: String path = getFilesDir().getAbsolutePath(); File file = new File(path + "/file.bin"); int size = (i

我想创建一个应用程序,可以打开二进制文件,读取和编辑十进制值的内容,然后将其保存回二进制文件

我要打开的这个文件有两个字节的多个参数。e、 g.
00 06 00 50 01 AB=6,80,427
到目前为止,我设法打开了bin文件,将文件中的所有数据放入
字节[]

以下是打开和读取文件的代码:

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();
}
下面是将
字节[]
转换为十进制值的第一次尝试:

for (int i = 0; i < size / 2; i = i + 2) {
    intArray[i] = ((bytes[i] & 0xff) << 8) | (bytes[i + 1] & 0xff);
}
我被困在这里,需要一些指导。我还必须说,我是编程新手。
谢谢

您将每次迭代中的
i
增加2,并存储在
intArray[i]
中。因此,存储在索引[0]中,然后存储在索引[2]中,然后存储在索引[4]中,依此类推。这解释了奇指数[1]、[3]、

此外,必须继续循环直到
size
,而不是
size/2

以下是正确的循环:

for (int i = 0; i < size; i = i + 2) {
    intArray[i/2] = ((bytes[i] & 0xff) << 8) | (bytes[i + 1] & 0xff);
}
for(int i=0;i
在每次迭代中将
i
增加2,然后存储在
intArray[i]
中。因此,存储在索引[0]中,然后存储在索引[2]中,然后存储在索引[4]中,依此类推。这解释了奇数索引[1]、[3]、

此外,必须继续循环直到
size
,而不是
size/2

以下是正确的循环:

for (int i = 0; i < size; i = i + 2) {
    intArray[i/2] = ((bytes[i] & 0xff) << 8) | (bytes[i + 1] & 0xff);
}
for(int i=0;i
intArray[i/2]工作得很好。谢谢。现在我们来看看如何将其反转并写回二进制文件。如果解决方案很好,感谢您投票并将答案标记为“解决方案”。intArray[i/2]非常好用。谢谢。现在我们来看看如何将其反转并写回二进制文件。如果解决方案很好,感谢您投票并将答案标记为“解决方案”。
for (int i = 0; i < size/2; i = i + 1) {
    intArray[i] = ((bytes[2*i] & 0xff) << 8) | (bytes[2*i + 1] & 0xff);
}
for (int i = 0; i < size/2; i = i + 1) {
    bytes[2*i] = (intArray[i] & 0xff00) / 256; //or >>8 instead of /256
    bytes[2*i+1] = intArray[i] & 0xff;
}