字节数组转成16进制字符串,有个地方没看懂

龙西四弟 2018-01-21 07:27:19


标注的地方实在没看懂,为什么<2 要添加0,是什么原理?

if (hv.length() < 2) {
stringBuilder.append(0);
}
...全文
1110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
galiniur0u 2018-01-25
  • 打赏
  • 举报
回复
引用 7 楼 tomomi 的回复:
[quote=引用 4 楼 galiniur0u 的回复:] 一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制, 也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
错了吧,一个char是8个位,4位就可以表示16进制[/quote] 所以一个char需要两个十六进制,那里错了?
tomomi 2018-01-24
  • 打赏
  • 举报
回复
引用 4 楼 galiniur0u 的回复:
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制, 也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
错了吧,一个char是8个位,4位就可以表示16进制
  • 打赏
  • 举报
回复
不要这样做,这样做性能较差,参考:

public class Hex {

    private static final char[] HEX = "0123456789abcdef".toCharArray();

    private Hex() {
    }

    public static void main(String[] args) {

        byte[] bytes = { 0 , 1 , 2 , (byte)0x7f };

        System.out.println( toHex( bytes ) );
    }

    public static String toHex(byte[] bytes) {

        if ( bytes == null ) {
            return null;
        }

        char[] chs = new char[bytes.length << 1];

        for ( int i = 0 , k = 0 ; i < bytes.length ; i++ ) {
            chs[k++] = HEX[(bytes[i] & 0xf0) >>> 4];
            chs[k++] = HEX[(bytes[i] & 0x0f)];
        }

        return new String(chs);
    }
}
「已注销」 2018-01-23
  • 打赏
  • 举报
回复
倒不如直接 String hv = String.format("%02X", v);
galiniur0u 2018-01-23
  • 打赏
  • 举报
回复
一个char是8字节,而4个字节就可以表示一个十六进制,因此一个char转换成十六进制需要转换成两位十六进制, 也就是:1111 1111 = F F,所以如果只有一位,就需要将高位的F补0。
dong_19890208 2018-01-22
  • 打赏
  • 举报
回复
引用 2 楼 zouyang2014 的回复:
[quote=引用 1 楼 oyljerry的回复:]就是补零。凑成两位。
能帮忙解答一下在什么情况下需要补0,是16进制最前面那个0还是什么情况![/quote] 这种问题自己写个单元测试测一下就知道了,比如 Integer i = 15; Integer.toHexString(i) 结果就是 "f",这种情况在前面补个0 就是 "0f", Integer i = 16; Integer.toHexString(i) 结果就是 "10",这种情况就不需要补0了
龙西四弟 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry的回复:
就是补零。凑成两位。
能帮忙解答一下在什么情况下需要补0,是16进制最前面那个0还是什么情况!
oyljerry 2018-01-21
  • 打赏
  • 举报
回复
就是补零。凑成两位。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧