将二进制字符串转换为hex字符串JAVA

我想将我的二进制文件(在字符串中)转换为hex字符串,这只是一个程序片段,因为这个程序只是另一个更大的程序的一部分:

//the variable name of the binary string is: "binary" int digitNumber = 1; int sum = 0; int test = binary.length()%4; if(test!=0) { binary = padLeft(binary, test); } for(int i = 0; i < binary.length(); i++){ if(digitNumber == 1) sum+=Integer.parseInt(binary.charAt(i) + "")*8; else if(digitNumber == 2) sum+=Integer.parseInt(binary.charAt(i) + "")*4; else if(digitNumber == 3) sum+=Integer.parseInt(binary.charAt(i) + "")*2; else if(digitNumber == 4 || i < binary.length()+1){ sum+=Integer.parseInt(binary.charAt(i) + "")*1; digitNumber = 0; if(sum < 10) System.out.print(sum); else if(sum == 10) System.out.print("A"); else if(sum == 11) System.out.print("B"); else if(sum == 12) System.out.print("C"); else if(sum == 13) System.out.print("D"); else if(sum == 14) System.out.print("E"); else if(sum == 15) System.out.print("F"); sum=0; } digitNumber++; } public static String padLeft(String s, int n) { return String.format("%0$"+n+"s", s); }//i added this for padding 

问题是我不知道填充是否有效,但我确信这个程序返回二进制字符串的错hex转换我试图这样做:

http://www.wikihow.com/Convert-Binary-to-Hexadecimal

PS:我需要实现它(不使用任何内置函数)

如果您不必自己实现该转换,则可以使用现有代码:

 int decimal = Integer.parseInt(binaryStr,2); String hexStr = Integer.toString(decimal,16); 

如果您必须自己实现它,代码中有几个问题:

  1. 循环应该从0迭代到binary.length() – 1(假设String的第一个字符代表最高位)。
  2. 您隐含地假设您的二进制String对于某个整数x有4 * x个字符。 如果不是这样,那么算法就会中断。 你应该用零填充你的字符串以获得这样长度的字符串。
  3. 在输出的每个hex数字后, sum必须重置为0。
  4. System.out.print(digitNumber); – 在这里你应该打印sum ,而不是digitNumber

以下是大多数固定代码的外观:

  int digitNumber = 1; int sum = 0; String binary = "011110101010"; for(int i = 0; i < binary.length(); i++){ if(digitNumber == 1) sum+=Integer.parseInt(binary.charAt(i) + "")*8; else if(digitNumber == 2) sum+=Integer.parseInt(binary.charAt(i) + "")*4; else if(digitNumber == 3) sum+=Integer.parseInt(binary.charAt(i) + "")*2; else if(digitNumber == 4 || i < binary.length()+1){ sum+=Integer.parseInt(binary.charAt(i) + "")*1; digitNumber = 0; if(sum < 10) System.out.print(sum); else if(sum == 10) System.out.print("A"); else if(sum == 11) System.out.print("B"); else if(sum == 12) System.out.print("C"); else if(sum == 13) System.out.print("D"); else if(sum == 14) System.out.print("E"); else if(sum == 15) System.out.print("F"); sum=0; } digitNumber++; } 

输出:

7AA

仅当二进制数字的数量可以除以4时才会起作用,因此必须添加左0填充作为预备步骤。

你可以尝试这样的事情。

 private void bitsToHexConversion(String bitStream){ int byteLength = 4; int bitStartPos = 0, bitPos = 0; String hexString = ""; int sum = 0; // pad '0' to make input bit stream multiple of 4 if(bitStream.length()%4 !=0){ int tempCnt = 0; int tempBit = bitStream.length() % 4; while(tempCnt < (byteLength - tempBit)){ bitStream = "0" + bitStream; tempCnt++; } } // Group 4 bits, and find Hex equivalent while(bitStartPos < bitStream.length()){ while(bitPos < byteLength){ sum = (int) (sum + Integer.parseInt("" + bitStream.charAt(bitStream.length()- bitStartPos -1)) * Math.pow(2, bitPos)) ; bitPos++; bitStartPos++; } if(sum < 10) hexString = Integer.toString(sum) + hexString; else hexString = (char) (sum + 55) + hexString; bitPos = 0; sum = 0; } System.out.println("Hex String > "+ hexString); } 

希望这会有所帮助:D

  import java.util.*; public class BinaryToHexadecimal { public static void main() { Scanner sc=new Scanner(System.in); System.out.println("enter the binary number"); double s=sc.nextDouble(); int c=0; long s1=0; String z=""; while(s>0) { s1=s1+(long)(Math.pow(2,c)*(long)(s%10)); s=(long)s/10; c++; } while(s1>0) { long j=s1%16; if(j==10) { z="A"+z; } else if(j==11) { z="B"+z; } else if(j==12) { z="C"+z; } else if(j==13) { z="D"+z; } else if(j==14) { z="E"+z; } else if(j==15) { z="F"+z; } else { z=j+z; } s1=s1/16; } System.out.println("The respective Hexadecimal number is : "+z); } } 

通过给定的二进制数01011011 ,我们将它首先转换为十进制数,每个数字将是Math.pow()减去长度:

01011011 =(0×2(7))+(1×2(6))+(0×2(5))+(1×2(4))+(1×2(3))+(0× 2(2))+(1×2(1))+(1×2(0))

=(0×128)+(1×64)+(0×32)+(1×16)+(1×8)+(0×4)+(1×2)+(1×1)

= 0 + 64 + 0 + 16 + 8 + 0 + 2 + 1

= 91(二进制数的十进制forms)

获得十进制数后,我们必须将其转换为hex数。

所以,91大于16.所以,我们必须除以16。

除以16后,商为5,余数为11。

剩余少于16。

余数的hex数是B.

商数为5,余数的hex数为B.

即,91 = 16×5 + 11 = B.

5 = 16×0 + 5 = 5

= 5B

执行:

 String hexValue = binaryToHex(binaryValue); //Display result System.out.println(hexValue); private static String binaryToHex(String binary) { int decimalValue = 0; int length = binary.length() - 1; for (int i = 0; i < binary.length(); i++) { decimalValue += Integer.parseInt(binary.charAt(i) + "") * Math.pow(2, length); length--; } return decimalToHex(decimalValue); } private static String decimalToHex(int decimal){ String hex = ""; while (decimal != 0){ int hexValue = decimal % 16; hex = toHexChar(hexValue) + hex; decimal = decimal / 16; } return hex; } private static char toHexChar(int hexValue) { if (hexValue <= 9 && hexValue >= 0) return (char)(hexValue + '0'); else return (char)(hexValue - 10 + 'A'); } 

/ * *要更改此许可证标题,请在“项目属性”中选择“许可证标题”。 *要更改此模板文件,请选择“工具”| 模板*并在编辑器中打开模板。 * / package stringprocessing;

/ ** * * @author Zayeed Chowdhury * / public class StringProcessing {

 /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here int index = 0; String bin = ""; String[] hexString = new String[bin.length() / 4]; for (int i = 0; i < bin.length() / 4; i++) { hexString[i] = ""; for (int j = index; j < index + 4; j++) { hexString[i] += bin.charAt(j); } index += 4; } for (int i = 0; i < bin.length() / 4; i++) { System.out.print(hexString[i] + " "); } System.out.println("\n" + bin.length()); String[] result = binaryToHex(hexString); for (int i = 0; i < result.length; i++) { System.out.print("" + result[i].toUpperCase()); } System.out.println(""); } public static String[] binaryToHex(String[] bin) { String[] result = new String[bin.length]; for (int i = 0; i < bin.length; i++) { result[i] = Integer.toHexString(Integer.parseInt(bin[i], 2)); } //return Integer.toHexString(Integer.parseInt(bin[0], 2)); return result; } 

}