简体   繁体   English

java输出十六进制(ByteArrayOutputStream)

[英]java output hex (ByteArrayOutputStream)

I have : 我有 :

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

and when System.out.println(outputStream) prints this .. i see 0►☻☺♣▬♂test some and I want to see this in HEX like 30 04 12 54 33 并在System.out.println(outputStream)打印此内容时..我看到0►☻☺♣▬♂test some ,我想在十六进制中看到它,例如30 04 12 54 33

How can I do that ? 我怎样才能做到这一点 ?

Thanks 谢谢

I was able to write the binary to a file like this : 我能够将二进制文件写入这样的文件:

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

Although the System.out.println() method can print different things out, it is mainly for printing strings. 尽管System.out.println()方法可以打印出不同的内容,但它主要用于打印字符串。 For this purpose, it will try to convert the input into character string according to the platform or some explicitly given character encoding. 为此,它将尝试根据平台或某些明确给定的字符编码将输入转换为字符串。 To print raw bytes as hex, you need some manipulation before printing them out. 要将原始字节打印为十六进制,在打印出来之前需要进行一些操作。 The following example might be useful to you. 以下示例可能对您有用。

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 = "0123456789ABCDEF";

    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();
   }
}

The getHex method is from http://www.rgagnon.com/javadetails/java-0596.html getHex方法来自http://www.rgagnon.com/javadetails/java-0596.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM