前言:最近字节数据需要打印出现查看,但是字节数据不可直接打印
查找网上原因:在内存中,数据都是以byte 为单位存储在内。当程序文件加载到内存中,才能运行。
1 byte =8bit,即8个0或1组成的序列。所以内存中都是0和1。
比如对于内存中的一段bit序列0110 0001,如果赋予它为整数类型,
它就代表十进制的97或十六进制的61(0x61);
如果把它看做一个字符串,查ASCII码表,它就是字母a。
在ASCII码表中,大写字母A~Z是十六进制数41到5A,小写字母是十六进制数61到7A。大写字母用二进制表示的话是从:
01000001 到 01011010
小写字母是从:
01100001 到 01111010
对比可以看出,差别在二进制从右往左第6位(b5)上,小写比大写多1,这可以理解为字母大小写切换的开关位,单击键盘上的“caps lock”或长按shift就与其有关。同样的,在主键盘区上,除了字母外一个键位通常对应两个符号,比如在1和!在一起,3和#在一起,等等。查ASCII码表也能找到shift键作为开关键的依据。可见,ASCII码表在设计时就是考虑了人类常用字符与交互工具-键盘的键位对应。
解决方法:Java中需要用DatatypeConverter.printHexBinary转换成⼗六进制打印出来。
Java byte数组转换成ASCII码,⼗六进制字符串打印
1、执行结果
public class HexBinary {
public static void main(String[] args){
String plain="HELLO WORLD!";
byte[] input = plain.getBytes();
System.out.println("字符串长度"+plain.length()+",String plain:"+plain);
System.out.println("input字节数据长度:"+input.length + ",bytes input:" + DatatypeConverter.printHexBinary(input));
}
}
输入:HELLO WORLD!
输出:48454C4C4F20574F524C4421
2、对比字符串和ASCII表:
Hex(十六进制)
0x48 H 大写字母H
0x45 E 大写字母E
0x4C L 大写字母L
0x4C L 大写字母L
0x4F O 大写字母O
0x20 (space) 空格
0x57 W 大写字母W
0x4F O 大写字母O
0x52 R 大写字母R
0x4C L 大写字母L
0x44 D 大写字母D
0x21 ! 叹号
ASCII参考:https://baike.baidu.com/item/ASCII/309296?fr=aladdin