Java:NumberFormatException在将二进制转换为十六进制时
我有作业要从BIN转换为HEX,我编写了以下算法代码:Java:NumberFormatException在将二进制转换为十六进制时,java,exception,binary,hex,Java,Exception,Binary,Hex,我有作业要从BIN转换为HEX,我编写了以下算法代码: import java.util.Scanner; public class BinaryToHex { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Binary number: "); String b = input.next
import java.util.Scanner;
public class BinaryToHex {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Binary number: ");
String b = input.next();
int bin = Integer.parseInt(b);
int arrlength = b.length();
while (arrlength%4 != 0){
arrlength++;
}
int[] arrbin = new int [arrlength];
int digit = 0;
String hex = "";
String str;
int conv;
for (int i = arrlength-1; i>=0; i--){
digit = bin%10;
arrbin[i]=digit;
bin = bin/10;
}
System.out.print("Hex value = ");
for (int index = 0; index < arrlength; index=index+4){
str = "" + arrbin[index] + "" + arrbin[index+1] + "" + arrbin[index+2] + "" + arrbin[index+3];
switch(str){
case "0000": str = "0"; break;
case "0001": str = "1"; break;
case "0010": str = "2"; break;
case "0011": str = "3"; break;
case "0100": str = "4"; break;
case "0101": str = "5"; break;
case "0110": str = "6"; break;
case "0111": str = "7"; break;
case "1000": str = "8"; break;
case "1001": str = "9"; break;
case "1010": str = "A"; break;
case "1011": str = "B"; break;
case "1100": str = "C"; break;
case "1101": str = "D"; break;
case "1110": str = "E"; break;
case "1111": str = "F"; break;
}
System.out.print(str);
}
}
}
我知道这个问题与int类型有关,但我不知道如何解决这个问题。我试着用长字体,结果是一样的
如果你们能帮我更正这段代码,以便处理更大的数字,我将不胜感激。我做得又快又脏。应适用于所有长度:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Binary number: ");
String b = input.next();
while (b.length() % 4 != 0) b = "0" + b;
StringBuilder builder = new StringBuilder();
for (int count = 0; count < b.length(); count += 4) {
String nibble = b.substring(count, count + 4);
builder.append(Integer.toHexString(Integer.parseInt(nibble, 2)));
}
System.out.println(builder);
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
系统输出打印(“二进制数:”);
字符串b=input.next();
而(b.length()%4!=0)b=“0”+b;
StringBuilder=新的StringBuilder();
对于(int count=0;count
这个数字确实太大了。如果需要如此大的数字,请使用Long.parseLong()
和Long
键入而不是int
编辑:
我刚刚了解到,您实际上想要解析二进制数。因此,使用
Integer.parseInt(str,2)
。否则,数字将被解释为十进制 我使用此方法进行转换
public static String binaryToHex(String bin) {
return String.format("%21X", Long.parseLong(bin,2)) ;
}
在Java中,int是有符号的32位,因此其范围为
-2,147,483,648 to 2,147,483,647
所以你的值10101010101010超出了这个范围
试着用大一点的,比如长的
long bin = Long.valueOf("10101010101010");
System.out.println(bin);
请参见如果输入字符串的最大值为32位,则无需使用长字符串
-- for any binary input till 32 bit lenght following will work
Integer.parseInt(yourBinaryString, 2)
-- for any binary input till 64 bit lenght following will work
Long.parseLong(yourBinaryString, 2)
-- for longer binary string input values have a look at BigInteger
谢谢你,这很有效!这就是我一直在寻找的!很抱歉,我不能投票支持你…:|
-- for any binary input till 32 bit lenght following will work
Integer.parseInt(yourBinaryString, 2)
-- for any binary input till 64 bit lenght following will work
Long.parseLong(yourBinaryString, 2)
-- for longer binary string input values have a look at BigInteger