我想将.hex文件中的字符符号转换为字节数组。我正在使用此代码,但结果与我的文件中的符号不同。如何将十六进制文件转换为二进制数组Android,Java
我的代码:
public byte[] getResource(int id, Context context) throws IOException {
Resources resources = context.getResources();
InputStream is = resources.openRawResource(id);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] readBuffer = new byte[2 * 1024 * 1024];
byte[] data;
try {
int read;
do {
read = is.read(readBuffer, 0, readBuffer.length);
if (read == -1) {
break;
}
String hex = new String(readBuffer);
data = hexStringToByteArray(hex);
bout.write(data);
// bout.write(readBuffer, 0, read);
} while (true);
return bout.toByteArray();
} finally {
is.close();
}
}
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len/2];
for (int i = 0; i < len; i += 2) {
data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}
首先从3个我.hex文件行
:020000040800F2 :20000000103C0020650200081502000817020008190200081B0200081D0200080000000056 :200020000000000000000000000000001F020008210200080000000023020008714A00087C
但是当我检查结果数组,我看到: -16,32,0,0,64,-128,15,31,-17,32,0,0,0,16,60,0,32,101,2,0,8 ,21 ...
我的错误在哪里?请给我正确的方式!
如果你有一个*文本*文件,你应该逐行阅读文本和一个'Reader'。注意你的文件的每一行显然是以冒号开头的,但是你现在将它当作十六进制数字处理。 –
@JonSkeet谢谢您的评论,但是您能否解释一下请 – MrStuff88
好吧,您的代码正在读取文件,就好像它是一个二进制文件,从InputStream读取并手动将字节转换为字符串。你的文件似乎是按行组织的,所以你为什么不用“BufferedReader”逐行阅读?然后,你需要修剪每一行的冒号... –