java用16进制的方式打印byte数组

11 篇文章 1 订阅
public static String bytes2hex(byte[] bytes) {
    StringBuilder sb = new StringBuilder();
    String tmp;
    sb.append("[");
    for (byte b : bytes) {
        // 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制
        tmp = Integer.toHexString(0xFF & b);
        if (tmp.length() == 1) {
            tmp = "0" + tmp;//只有一位的前面补个0
        }
        sb.append(tmp).append(" ");//每个字节用空格断开
    }
    sb.delete(sb.length() - 1, sb.length());//删除最后一个字节后面对于的空格
    sb.append("]");
    return sb.toString();
}

实现思路

将byte数组拼接成字符串,然后打印

实现过程

遍历byte数组,每个byte转换成16进制的Int

Integer.toHexString(0xFF & b);

使用0xFF和byte做逻辑与,是为了去除byte中的多余部分

对于小于16(16进制中的个位数),用0补齐,这样可以使打印出来的数据长度一致

toHexString说明

以16为底的无符号整数形式返回整数参数的字符串表示形式。

如果参数为负数,则无符号整数值为参数加2^32;否则,它等于论点。此值被转换为十六进制(以16为底)的ASCII数字字符串,没有额外的前导0。

可以通过调用Integer.parseUnsignedInt(s,16)从返回的字符串s中恢复参数的值。

如果无符号幅值为零,则用单个零字符“0”(“\u0030”)表示;否则,无符号幅度表示的第一个字符将不是零字符。以下字符用作十六进制数字:

0123456789bcdef

这些是字符“\u0030”到“\u0039”和“\u0061”到“\u0066”。如果需要大写字母,则可以对结果调用String.toUpperCase()方法:

Integer.toHexString(n).toUpperCase()

参数:i–要转换为字符串的整数。

退货:由十六进制(以16为底)的参数表示的无符号整数值的字符串表示。

自:JDK1.0.2

也可以使用parseUnsignedInt(String s, int radix)方法来转16进制

parseUnsignedInt

将字符串参数解析为第二个参数指定基数的无符号整数。无符号整数将通常与负数相关的值映射为大于MAX_VALUE的正数。字符串中的字符都必须是指定基数的数字(由Character.digh(char,int)是否返回非负值决定),但第一个字符可以是ASCII加号“+”(“\u002B”)。返回得到的整数值。

如果发生以下任何情况,将引发NumberFormatException类型的异常:

第一个参数为null或是长度为零的字符串。

基数小于Character.MIN_radix或大于Character.MAX_radix。

字符串中的任何字符都不是指定基数的数字,但第一个字符可以是加号“+”(“\u002B”),前提是字符串长度大于1。

字符串表示的值大于最大的无符号整数2^32-1。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不会写代码的猴子

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值