2012-03-29 361 views
1

我:java的輸出十六進制(ByteArrayOutputStream)

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
encoder.encode(question, outputStream); 

System.out.println(outputStream)打印這個..我看到0►☻☺♣▬♂test some,我想看到這個HEX像30 04 12 54 33

我怎麼能這樣做?

感謝

我能寫的二進制文件這樣的文件:

File file = new File("out.bin"); 
FileOutputStream filename = new FileOutputStream(file); 
outputStream.writeTo(filename); 
+0

這裏看看:http://stackoverflow.com/a/2149927/986169 – giorashc 2012-03-29 12:55:36

+0

我的情況是有辦法解決嗎?只是爲了這個例子..我並不擅長這個,所以......:| – pufos 2012-03-29 13:19:54

+0

我把這個二進制文件寫到'outputStream.writeTo(filename)'這樣的文件中,其中文件是'File file = new File(「out.bin」); FileOutputStream filename = new FileOutputStream(file);' – pufos 2012-03-29 14:55:53

回答

0

雖然System.out.println()方法可以打印不同的東西,但主要是打印字符串。爲此,它將嘗試根據平臺或某些明確給定的字符編碼將輸入轉換爲字符串。要以十六進制格式打印原始字節,在打印出來之前需要進行一些操作。以下示例可能對您有用。

import java.io.*; 

class PrintHex 
{ 
    public static void main(String[] args) 
    { 
     byte[] raw = {0x30,0x04,0x12,0x54,0x33}; 
     byte[] raw1 = {'G','I','F'}; 
     ByteArrayOutputStream bo = new ByteArrayOutputStream(); 
     ByteArrayOutputStream bo1 = new ByteArrayOutputStream(); 
     bo.write(raw,0,raw.length); 
     bo1.write(raw1,0,raw1.length); 

     System.out.println(bo); 
     System.out.println(bo1); 

     System.out.println("0x" + getHex(raw)); 
     System.out.println("0x" + getHex(raw1)); 
    } 
    static final String HEXES = "ABCDEF"; 

    public static String getHex(byte [] raw) { 
     if (raw == null) { 
      return null; 
     } 
     final StringBuilder hex = new StringBuilder(2 * raw.length); 
     for (final byte b : raw) { 
      hex.append(HEXES.charAt((b & 0xF0) >> 4)) 
     .append(HEXES.charAt((b & 0x0F))); 
     } 
     return hex.toString(); 
    } 
} 

getHex方法是從http://www.rgagnon.com/javadetails/java-0596.html

+0

這是不好的......我需要二進制到十六進制 – pufos 2012-03-29 13:54:42

+0

pufos,你是什麼意思二進制到十六進制? ByteArrayOutputStream爲十六進制?首先將ByteArrayOutputStream更改爲字節數組,而不是使用上述方法。 – dragon66 2012-03-29 14:03:24

+0

它還包含文本 – pufos 2012-03-29 14:54:34