繁体   English   中英

java输出十六进制(ByteArrayOutputStream)

[英]java output hex (ByteArrayOutputStream)

我有 :

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

并在System.out.println(outputStream)打印此内容时..我看到0►☻☺♣▬♂test some ,我想在十六进制中看到它,例如30 04 12 54 33

我怎样才能做到这一点 ?

谢谢

我能够将二进制文件写入这样的文件:

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

尽管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 = "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();
   }
}

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

暂无
暂无

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

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