将hex字符串(hex)转换为二进制字符串

我发现以下方式进行hex到二进制转换:

String binAddr = Integer.toBinaryString(Integer.parseInt(hexAddr, 16)); 

虽然这种方法适用于小hex数,但hex数如下

 A14AA1DBDB818F9759 

抛出NumberFormatException.

因此,我编写了以下似乎有效的方法:

 private String hexToBin(String hex){ String bin = ""; String binFragment = ""; int iHex; hex = hex.trim(); hex = hex.replaceFirst("0x", ""); for(int i = 0; i < hex.length(); i++){ iHex = Integer.parseInt(""+hex.charAt(i),16); binFragment = Integer.toBinaryString(iHex); while(binFragment.length() < 4){ binFragment = "0" + binFragment; } bin += binFragment; } return bin; } 

上面的方法基本上取hex字符串中的每个字符并将其转换为二进制等效值,如果需要,将其与零连接,然后将其连接到返回值。 这是执行转换的正确方法吗? 或者我忽略了可能导致我失败的方法?

在此先感谢您的任何帮助。

BigInteger.toString(radix)会做你想要的。 只需输入2的基数。

 static String hexToBin(String s) { return new BigInteger(s, 16).toString(2); } 
 Integer.parseInt(hex,16); System.out.print(Integer.toBinaryString(hex)); 

将hex(String)解析为带有base 16的整数,然后使用toBinaryString(int)方法将其转换为Binary String

 int num = (Integer.parseInt("A2B", 16)); System.out.print(Integer.toBinaryString(num)); 

将打印

 101000101011 

由int处理的Max Hex vakue是FFFFFFF

即如果传递FFFFFFF0,则会产生错误

全零:

 static String hexToBin(String s) { String preBin = new BigInteger(s, 16).toString(2); Integer length = preBin.length(); if (length < 8) { for (int i = 0; i < 8 - length; i++) { preBin = "0" + preBin; } } return preBin; } 
 public static byte[] hexToBin(String str) { int len = str.length(); byte[] out = new byte[len / 2]; int endIndx; for (int i = 0; i < len; i = i + 2) { endIndx = i + 2; if (endIndx > len) endIndx = len - 1; out[i / 2] = (byte) Integer.parseInt(str.substring(i, endIndx), 16); } return out; } 
 import java.util.*; public class HexadeciamlToBinary { public static void main() { Scanner sc=new Scanner(System.in); System.out.println("enter the hexadecimal number"); String s=sc.nextLine(); String p=""; long n=0; int c=0; for(int i=s.length()-1;i>=0;i--) { if(s.charAt(i)=='A') { n=n+(long)(Math.pow(16,c)*10); c++; } else if(s.charAt(i)=='B') { n=n+(long)(Math.pow(16,c)*11); c++; } else if(s.charAt(i)=='C') { n=n+(long)(Math.pow(16,c)*12); c++; } else if(s.charAt(i)=='D') { n=n+(long)(Math.pow(16,c)*13); c++; } else if(s.charAt(i)=='E') { n=n+(long)(Math.pow(16,c)*14); c++; } else if(s.charAt(i)=='F') { n=n+(long)(Math.pow(16,c)*15); c++; } else { n=n+(long)Math.pow(16,c)*(long)s.charAt(i); c++; } } String s1="",k=""; if(n>1) { while(n>0) { if(n%2==0) { k=k+"0"; n=n/2; } else { k=k+"1"; n=n/2; } } for(int i=0;i