您好,欢迎来到花图问答。
搜索
您的当前位置:首页Java 打印byte数组的16进制字符串

Java 打印byte数组的16进制字符串

来源:花图问答

每个byte为8位,用16进制表示需要2个16进制位
比如:
半个byte:(二进制1111) == (十进制15) == (十六进制f)
一个byte:(二进制11111111) == (十进制255) == (十六进制ff)

import javax.xml.bind.DatatypeConverter;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        MessageDigest messageDigest = null;
        try {
            String str = "测试字符串";
            messageDigest = MessageDigest.getInstance("SHA1");
            messageDigest.update(str.getBytes("UTF-8"));
            byte bytes[] = messageDigest.digest();

            BigInteger bigInteger = new BigInteger(1, bytes);
            System.out.println(bigInteger.toString(16));


            String strHexBytes = DatatypeConverter.printHexBinary(bytes);
            System.out.println(strHexBytes);


            System.out.println(bytes2hex(bytes));
        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

    public static String bytes2hex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        String tmp = null;
        for (byte b : bytes) {
            // 将每个字节与0xFF进行与运算,然后转化为10进制,然后借助于Integer再转化为16进制
            tmp = Integer.toHexString(0xFF & b);
            if (tmp.length() == 1) {     
                tmp = "0" + tmp;
            }
            sb.append(tmp);
        }
        return sb.toString();

    }
}

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务