Fork me on GitHub

16进制字符串和byte数组进行相互转换\将10进制转换为任意进制

16进制字符串和byte数组进行相互转换

简介

1个byte对应8个bit,16进制使用4个bit,所以一个byte转成16进制,占用两位。

JAVA代码

private static final char HexCharArr[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

    private static final String HexStr = "0123456789abcdef";

    //字节数组转成16进制字符串
    public static String byteArrToHex(byte[] btArr) {
        char strArr[] = new char[btArr.length * 2];
        int i = 0;
        for (byte bt : btArr) {
            strArr[i++] = HexCharArr[bt>>>4 & 0xf];
            strArr[i++] = HexCharArr[bt & 0xf];
        }
        return new String(strArr);
    }
    //16进制字符串转成字节数组
    public static byte[] hexToByteArr(String hexStr) {
        char[] charArr = hexStr.toCharArray();
        byte btArr[] = new byte[charArr.length / 2];
        int index = 0;
        for (int i = 0; i < charArr.length; i++) {
            int highBit = HexStr.indexOf(charArr[i]);
            int lowBit = HexStr.indexOf(charArr[++i]);
            btArr[index] = (byte) (highBit << 4 | lowBit);
            index++;
        }
        return btArr;
    }

Gitee地址

https://gitee.com/zhuayng/foundation-study/tree/develop/JavaBasis/Other/src/main/java/com/yxkj/other/modular/byteandchar

参考

https://www.cnblogs.com/zhaoyue1215/p/10449530.html

将10进制转换为任意进制

简介

此针对的是int类型或Long类型

  • 思路

1、十进制数 num 转换为 n进制
num%n结果肯定为n进制数的最后一位
结果存入一个数组中
2、进入一个循环num!=0时候
num=num/n
重复1的操作
将倒数第二位、倒数第三位。。。到最终结果存入数组
3、遍历数组从 count到0

JAVA代码

 public  char[] transform(int num, int n) {
        int[] c=new int[100];
        int b=-1;
        while (num!=0) {
            b++;
            int a=num%n;
            num=num/n;
            c[b]=a;

        }
        char[] d=new char[1024];
        int e=-1;
        //注意 int转成char  char获取的是int的ASCII码值
        for (int f=0;f<=b;f++) {
            e++;
            if (c[f]>9){
                //A对应2进制为65 ,对应10进制为10 ,故10进制的10转为16进制 在10进制上加上65-10=55
                char c1 = (char) (c[f] + 55);
                d[e]=c1;
            }else {
                //10进制转为2进制,10进制的0对应2进制为48
                char c1 = (char) (c[f]+48);
                d[e]=c1;
            }

        }
        return d;
    }
    @Test
    public void Test() {
        // 测试用例
        Transformation t = new Transformation();
        char[] transform = t.transform(314154363, 16);
        System.out.println(transform);

    }

Gitee代码地址

https://gitee.com/zhuayng/foundation-study/tree/develop/JavaBasis/Other/src/main/java/com/yxkj/other/modular/coding

posted @ 2021-09-03 18:50  晨度  阅读(1164)  评论(0编辑  收藏  举报