Java(91):Java byte数组转换成ASCII码,⼗六进制字符串打印

前言:最近字节数据需要打印出现查看,但是字节数据不可直接打印

查找网上原因:内存中,数据都是以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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁宁可可

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值