2013-02-10 94 views
1

我想将一个字符串转换为十六进制,然后转换成一个字节数组。这是我到目前为止的代码:如何将十六进制字符串直接转换为字节数组?

public static void findKey(){ 

    Cipher cipher; 
    SecretKeySpec key; 
    byte [] keyBytes; 
    byte [] pt; 
    byte [] ct; 

    String plaintext = "Plaintxt"; 
    ct = new byte [] {(byte)0x4A, (byte)0xC4, (byte)0x55, (byte)0x3D, (byte)0xB3, (byte)0x37, (byte)0xCA, (byte)0xB3}; 
    String ptHex = asciiToHex(plaintext); 
    System.out.println(ptHex); 
    pt = ptHex.getBytes(); 
    printByteArray(pt); 
} 

我要转换为十六进制的方法工作正常,但是当我使用getBytes,它显然它变成16个字节,这不是我想要的。那只是一个尝试。下面是从刚刚打印我的字符串,以确保它的工作,然后打印字节数组这是不正确的输出:

506c61696e747874 
[ 35 30 36 63 36 31 36 39 36 65 37 34 37 38 37 34 ] 
-------------Key Found------------- 

我要坐50,6C,61等,并把它变成一个字节数组就像我为ct所做的那样,如0x50,0x6c等等。

这甚至可能吗?

回答

2

尝试

byte[] getBytes(String s) { 
    byte[] a = new byte[s.length()/2]; 
    for (int i = 0; i < a.length; i++) { 
     a[i] = Byte.parseByte(s.substring(i * 2, i * 2 + 2), 16); 
    } 
    return a; 
} 
+0

你先生忠实地是男人。这正是我期待的。 – erp 2013-02-10 04:54:18

0

使用此一班轮,它采用了JDK的API:

byte[] array = ByteBuffer.allocate(8).putLong(Long.parseLong(chars, 16)).array(); 

这是一个测试:

import java.nio.ByteBuffer; 

public static void main(String[] args) throws Exception { 
    String chars= "506c61696e747874"; 
    byte[] array = ByteBuffer.allocate(8).putLong(Long.parseLong(chars, 16)).array(); 
    System.out.println(Arrays.toString(array)); 
} 

输出:

[80, 108, 97, 105, 110, 116, 120, 116] 

当然这里的输出是十进制,但值是正确的。转换十六进制字节数组

0

简单的Java方法:

byte[] byteArray= new BigInteger(hexvalue, 2).toByteArray(); 
相关问题