2013-02-10 95 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(); 
相關問題