JAVA里16进制和字节数组互转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA里16进制和字节数组互转相关的知识,希望对你有一定的参考价值。

byte[] bytes = new byte[](byte)0x12, (byte)0x0F, (byte)0xF0;
BigInteger bi = new BigInteger(bytes);
String s = bi.toString(16);
这个可行?可以的话要怎么转回来!大括号里是什么意思?
有没有别的方法。

参考技术A 大括号理的就是一个byte类型的数组,里面是3个byte类型那个的数

public static String stringToHexString(String strPart)
String hexString = "";
for (int i = 0; i < strPart.length(); i++)
int ch = (int) strPart.charAt(i);
String strHex = Integer.toHexString(ch);
hexString = hexString + strHex;

return hexString;


private static String hexString="0123456789ABCDEF";
/*
* 将字符串编码成16进制数字,适用于所有字符(包括中文)
*/
public static String encode(String str)

// 根据默认编码获取字节数组
byte[] bytes=str.getBytes();
StringBuilder sb=new StringBuilder(bytes.length*2);
// 将字节数组中每个字节拆解成2位16进制整数
for(int i=0;i<bytes.length;i++)

sb.append(hexString.charAt((bytes[i]&0xf0)>>4));
sb.append(hexString.charAt((bytes[i]&0x0f)>>0));

return sb.toString();


/*
* 将16进制数字解码成字符串,适用于所有字符(包括中文)
*/
public static String decode(String bytes)

ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
// 将每2位16进制整数组装成一个字节
for(int i=0;i<bytes.length();i+=2)
baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
return new String(baos.toByteArray());


private static byte uniteBytes(byte src0, byte src1)
byte _b0 = Byte.decode("0x" + new String(new byte[] src0)).byteValue();
_b0 = (byte) (_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[] src1)).byteValue();
byte ret = (byte) (_b0 | _b1);
return ret;

public static byte[] HexString2Bytes(String src)

byte[] ret = new byte[6];
byte[] tmp = src.getBytes();
for(int i=0; i<6; ++i )

ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);

return ret;


这方法就可以互相转,你看看吧本回答被提问者和网友采纳

JAVA:二进制和十进制互转

package com.xxx.transfer;

/**
 * 数字进制相互转换
 * @see JDK中提供了这些功能
 * @author le.li
 *
 */
public class NumberUtil {
    public static void main(String[] args) {
        // 通过X的n次方相加的方式,将二进制转换成十进制
        System.out.println(binary2Decimal("1001"));
        // 通过取余数的方式,将十进制转成二进制
        System.out.println(decimal2Binary(9));
        
        // jdk中二进制转十进制方式
        System.out.println(Integer.parseInt("1001", 2));
        // jdk中十进制转二进制方式
        System.out.println(Integer.toBinaryString(9));
        System.out.println(Integer.toString(9, 2));
    }
    
    /**
     * 二进制转十进制
     * @param number
     * @return
     */
    public static int binary2Decimal(String number) {
        return scale2Decimal(number, 2);
    }
    
    /**
     * 其他进制转十进制
     * @param number
     * @return
     */
    public static int scale2Decimal(String number, int scale) {
        checkNumber(number);
        if (2 > scale || scale > 32) {
            throw new IllegalArgumentException("scale is not in range");
        }
        // 不同其他进制转十进制,修改这里即可
        int total = 0;
        String[] ch = number.split("");
        int chLength = ch.length;
        for (int i = 0; i < chLength; i++) {
            total += Integer.valueOf(ch[i]) * Math.pow(scale, chLength - 1 - i);
        }
        return total;
        
    }
    
    /**
     * 二进制转十进制
     * @param number
     * @return
     */
    public static String decimal2Binary(int number) {
        return decimal2Scale(number, 2);
    }
    
    /**
     * 十进制转其他进制
     * @param number
     * @param scale
     * @return
     */
    public static String decimal2Scale(int number, int scale) {
        if (2 > scale || scale > 32) {
            throw new IllegalArgumentException("scale is not in range");
        }
        String result = "";
        while (0 != number) {
            result = number % scale + result;
            number = number / scale;
        }
        
        return result;
    }
    
    public static void checkNumber(String number) {
        String regexp = "^\d+$";
        if (null == number || !number.matches(regexp)) {
            throw new IllegalArgumentException("input is not a number");
        }
    }
}

 

以上是关于JAVA里16进制和字节数组互转的主要内容,如果未能解决你的问题,请参考以下文章

C# 字节数组各进制字符串数据互转

java中把字节数组为16进制字串

Python 16进制字节数组转字符串

最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类

python 字符串转字节数组

java wireshark 16进制复制的字符串转换字节数组