2015-03-13 145 views
0

我有一个从一些字节SHA-512生成的字节数组。 484c1514b468429967aa0c8e2ab6d99c14e7cd4a45605cb834ebfd3612a0cc9184510d8d0a9c92e636d82c065fa2db0e05ef5c2518153a6c4ca9eebbe8d7b475 从一个字节获取半字节

当我迭代如下;

for(byte x = 0; x < s512in.length; x++){ 
    System.out.println(String.format("%02X ", s512in[x]) + "); 
} 

我可以得到48,4C,15 ....但我想从字节数组中获得4,8,4,C ...。如何在不转换为字符串的情况下获得该信息?

+0

什么是's512in'声明的类型? – 2015-03-13 09:20:45

+0

@KirillK Err,一个字节数组? – EJP 2015-03-13 09:23:57

+0

检查McDowell的答案是否有帮助。如果没有,请发布你的代码,包括gettig s512 in – 2015-03-13 09:34:34

回答

5
byte[] data = "nibbles".getBytes(StandardCharsets.US_ASCII); 
for(byte b : data) { 
    int high = (b & 0xf0) >> 4; 
    int low = b & 0xf; 
    System.out.format("%x%n", high); 
    System.out.format("%x%n", low); 
} 
+0

谢谢麦克道尔。正是我在找什么。 – vidulaJ 2015-03-13 09:50:09

-2

用法如下。

try { 

     byte[] data = "nibbles".getBytes("UTF-8"); 
     for (int i = 0; i < data.length; i++) { 
      String temp = Integer.toString((data[i] & 0xff) + 0x100, 16) 
        .substring(1); 
      System.out.println(temp); 
     } 

    } catch (UnsupportedEncodingException ex) { 
     Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); 
    } 
+1

甚至没有编译,如果它没有打印半字节。 – EJP 2015-03-13 09:23:26

+0

这和我以前发布的问题一样,但是! – vidulaJ 2015-03-13 09:49:48

+0

@EJP请参阅修改后的代码。 – Don 2015-03-13 10:17:06