2012-03-29 355 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