如何使用Java将十六进制的字符串数组转换为整型数组?

3
我有一个如下的类:
public class EXOR{

    public static void conv(){
        String [] Parray={"243f6a88","85a308d3","13198a2e","03707344","a4093822","299f31d0","082efa98",
                "ec4e6c89","452821e6", "38d01377", "be5466cf","34e90c6c","c0ac29b7","c97c50dd","3f84d5b5","b5470917","9216d5d9","8979fb1b"};

        String binAddr[]=new String[18];
        for (int i=0;i<18;i++)
        {
            int x[]=new int[18];
            binAddr[i]= Integer.toBinaryString(Integer.parseInt(Parray[i],16));
            System.out.println("binernya : " +binAddr[i]);
        }

    }

    public static void main(String[] args){
        new EXOR().conv();

    }
}

我希望将该数组转换为二进制数组格式。 我希望得到以下输出 例如

00100100001111110110101010001000
10000111101000110000100011010011
................................

如何解决这个问题?

Java不是一种脚本语言;这不是一个脚本;包含十六进制的字符串数组不是十六进制整数数组。 - user207421
3个回答

1
我猜想在执行你的代码时,你一定遇到了一个数字点异常。当十六进制字符串超出整数范围时,就会发生这种情况。
你可以使用:
    binAddr[i]= (new BigInteger(Parray[i],16)).toString(2);

替代

binAddr[i]= Integer.toBinaryString(Integer.parseInt(Parray[i],16));

这将解决您的问题,供快速参考 大整数文档


感谢您的回复。 - novita indriyani

0

代码:

public class EXOR {

    public static void conv(){

        String [] Parray={"243f6a88","85a308d3","13198a2e","03707344","a4093822","299f31d0","082efa98",
                "ec4e6c89","452821e6", "38d01377", "be5466cf","34e90c6c","c0ac29b7","c97c50dd","3f84d5b5","b5470917","9216d5d9","8979fb1b"};

        String [] binAddr = new String[Parray.length];

        for (int i = 0; i < binAddr.length; i++)
        {
            int strLen = Parray[i].length();
            binAddr[i] = "";

            for(int j = 0; j < strLen; j++) {
                String temp = Integer.toBinaryString(
                        Integer.parseInt(String.valueOf(
                                Parray[i].charAt(j)), 16));

                // Pad with leading zeroes
                for(int k = 0; k < (4 - temp.length()); k++) {
                    binAddr[i] += "0";
                }
                binAddr[i] += temp;
            }

            System.out.println("Original: " + Parray[i]);
            System.out.println("Binary: " + binAddr[i]);
        }
    }

    public static void main(String[] args){
        conv();
    }
}

输出的前几行:

Original: 243f6a88
Binary: 00100100001111110110101010001000
Original: 85a308d3
Binary: 10000101101000110000100011010011

谢谢,你的答案解决了我的问题:D - novita indriyani
没问题,如果有帮助的话,您可以接受这个答案。 - almightyGOSU

0

我们有一个Integer.MAX_VALUE = 2147483647 但是,第二个项目“85A308D3”= 2242054355。它超出了Integer的能力。

因此,使用Integer.parseInt(85A308D3)将导致java.lang.NumberFormatException

要解决这个问题,请将您的代码更改为使用Long而不是Integer

        binAddr[i] = Long.toBinaryString(Long.parseLong(Parray[i], 16));

希望这能帮到你!


好的,谢谢。我解决了 :D @安东尼 - novita indriyani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接