有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java输出十六进制(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);

共 (2) 个答案

  1. # 1 楼答案

    尽管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