2016-12-07 41 views
0

我编写和使用的应用程序在Java中的Android工作室,我将不胜感激一些帮助,因为我在雨燕2.3下面这个例子:如何在java中编写HexStringToData与Swift示例相同?

private func hexStringToData(hexString: String) -> NSData { 

    print("String: \(hexString)") 

    let chars = Array(hexString.characters) 

    let numbers = 0.stride(to: chars.count, by: 2).map { 
     UInt8(String(chars[$0 ..< $0+2]), radix: 16) ?? 0 
    } 
    return NSData(bytes: numbers, length: numbers.count) 

} 

我想知道是否有可能有相当于Java中,我尝试下面的代码,但这似乎对失败:无效的数组范围:6 6的代码示例如下:

private static byte[]hexStringToData (String hexString) { 

    Log.e("[hexStringToData]String", ":" + hexString); 

    int len = hexString.length(); 
    byte[] data = new byte[len/2]; 
    for (int i = 0; i < len; i += 2) { 
     data[i/2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) 
       + Character.digit(hexString.charAt(i+1), 16)); 
    } 
    return data; 
} 

是否有人可以告诉我在哪里,我出错了,提前致谢....

这是字符串:A4728E4491AA598E0473C2EB860C8872B8F53630329C97B8D7FF1A0F9BC5 487E971CAD562E7C4C7A 2847CFB4681F0E563B66 7A6E6E09FBF60378A302 44E0981A46CB17BA3F22 8A4DD89360B3C4CB156D 794E9ADE22F55F55A6A7 E76A726588B1C615774E 713F6D1E59D7B1D82E2B 913330AB92C1DB595054 0FFC2C9B6ED0889000A9 51778F3A82C1CCB16651 DFFAA6C6A40EEE9FFB24 217F85C57A190757BF57 4ADC9D9A7E38DBC3B7B3 61AFC0D3C36A76916DEF 493633708E9D9BFB639F 8D2499C2A71D6E8A52F6 34050BD3FF1260502E8A 2834B1FB56BED29CAB1B 3993EA669313ECD63FC9 911F1BFF1EA4AAC5410D E9E2D80AE5B05F701EDD 4F06B5CD532

+0

显示您遇到问题的调用。你的代码看起来基本上与我有(似乎!)工作正常(假设字符串是偶数个十六进制数字)相同。 – TripeHound

+0

当我通过转换这一行:data [i/2] =(byte)((Character.digit(hexString.charAt(i),16)<< 4)显示我在java控制台中的错误。 lang,IndexOutOfBoundsException:Invaild数组范围6到6,它是我试图转换的rsa文件,这有帮助吗? – Jonas

+0

您需要显示传递给'hexStringToData()'的_specific_'String',问题,该函数只适用于带有十六进制数字_even_的字符串 - 奇数个字符肯定会炸毁它,因为可能会出现非十六进制字符 – TripeHound

回答

0

原来我做了一个学校的男孩错误:hexStringToData(文件),“文件0001.rsa”,我试图转换文件名本身,而不是在自己的实际文件,所以我的长度是13的文件名和th长度应该是512的文件。

相关问题