2017-03-02 158 views
0

我想将.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 ...

我的错误在哪里?请给我正确的方式!

+0

如果你有一个*文本*文件,你应该逐行阅读文本和一个'Reader'。注意你的文件的每一行显然是以冒号开头的,但是你现在将它当作十六进制数字处理。 –

+0

@JonSkeet谢谢您的评论,但是您能否解释一下请 – MrStuff88

+0

好吧,您的代码正在读取文件,就好像它是一个二进制文件,从InputStream读取并手动将字节转换为字符串。你的文件似乎是按行组织的,所以你为什么不用“BufferedReader”逐行阅读?然后,你需要修剪每一行的冒号... –

回答

1

首先从文件中读取所有数据,并从字符串中删除所有不正确的符号,例如(':'),如@pitfall所示并存储在字符串中,然后执行以下操作。

String s="yourStringFromFile"; 
byte[] b = new BigInteger(s,16).toByteArray(); 
0

您应该从十六进制字符串中删除所有不正确的符号(如':')。

hexStringToByteArray( “:020000040800F”) - > [-16,32,0,0,64,-128,15] hexStringToByteArray( “020000040800F2”) - > [2,0,0,4,8, 0,-14]

相关问题