繁体   English   中英

如何将字节数组转换为人类可读格式?

[英]How to convert byte array into Human readable format?

我使用“Blowfish”算法来加密和解密文本内容。 我正在将加密的内容嵌入到图像中,但在提取时我得到的是字节数组,我将它传递给类Cipher的方法更新

但是该方法返回了我想要转换回人类可读形式的字节数组。
当我使用FileOutputStream的 write方法时,它在提供文件名时工作正常。
但现在我想以人类可读的格式在控制台上打印它。 如何通过这个? 我也尝试过ByteArrayOutputStream。 但效果不佳。

谢谢。

如果您只想查看数值,则可以遍历数组并打印每个字节:

for(byte foo : arr){
    System.out.print(foo + " ");
}

或者,如果要查看十六进制值,可以使用printf

System.out.printf("%02x ", foo);

如果要查看字节数组所代表的字符串,您可以这样做

System.out.print(new String(arr));

您可以使用此方法将bytearray转换为包含字节十六进制值的字符串。 这甚至适用于java <6

public class DumpUtil {

     private static final String HEX_DIGITS = "0123456789abcdef";

     public static String toHex(byte[] data) {
        StringBuffer buf = new StringBuffer();

        for (int i = 0; i != data.length; i++) {
            int v = data[i] & 0xff;

            buf.append(HEX_DIGITS.charAt(v >> 4));
            buf.append(HEX_DIGITS.charAt(v & 0xf));

            buf.append(" ");
        }

        return buf.toString();
    }   
}
byte[] byteArray = new byte[] {87, 79, 87, 46, 46, 46};

String value = new String(byteArray);
byte[] data = new byte[] {1, 2, 3, 4};
System.out.printf( Arrays.toString( data ) );

[1, 2, 3, 4]

做一个字节数组的hexDump更好

private static final byte[] HEX_CHAR = new byte[] { '0', '1', '2', '3',
            '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
public static final String dumpBytes(byte[] buffer) {
        if (buffer == null) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        sb.setLength(0);
        for (int i = 0; i < buffer.length; i++) {
            sb.append((char) (HEX_CHAR[(buffer[i] & 0x00F0) >> 4]))
                    .append((char) (HEX_CHAR[buffer[i] & 0x000F])).append(' ');
        }
        return sb.toString();
    }

暂无
暂无

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

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