17 Stimmen

Hexadezimalzeichenfolge in Binärzeichenfolge umwandeln

Ich möchte eine Hex-Zeichenkette in eine binäre Zeichenkette umwandeln. Zum Beispiel ist Hex 2 0010. Unten ist der Code:

String HexToBinary(String Hex)
{
    int i = Integer.parseInt(Hex);
    String Bin = Integer.toBinaryString(i);
    return Bin;
}

Dies funktioniert jedoch nur für Hex 0 - 9; für Hex A - F funktioniert es nicht, da es die int . Kann sie jemand verbessern?

39voto

Sergey Kalinichenko Punkte 694383

Sie müssen Java mitteilen, dass der int-Wert in hexadezimaler Form vorliegt, etwa so:

String hexToBinary(String hex) {
    int i = Integer.parseInt(hex, 16);
    String bin = Integer.toBinaryString(i);
    return bin;
}

22voto

Sean Patrick Floyd Punkte 283617

Die akzeptierte Version funktioniert nur für 32-Bit-Zahlen.

Hier ist eine Version, die für beliebig lange Hex-Zeichenketten funktioniert:

public static String hexToBinary(String hex) {
    return new BigInteger(hex, 16).toString(2);
}

7voto

CapnChaos Punkte 101

Die akzeptierte Antwort funktioniert nur für 32-Bit-Werte, und die alternative BigInteger-Version schneidet führende Nullen in der binären Zeichenfolge ab! Hier ist eine Funktion, die in allen Fällen funktionieren sollte.

public static String hexToBinary(String hex) {
    int len = hex.length() * 4;
    String bin = new BigInteger(hex, 16).toString(2);

    //left pad the string result with 0s if converting to BigInteger removes them.
    if(bin.length() < len){
        int diff = len - bin.length();
        String pad = "";
        for(int i = 0; i < diff; ++i){
            pad = pad.concat("0");
        }
        bin = pad.concat(bin);
    }
    return bin;
}

6voto

user3184391 Punkte 61

Hier sind einige Routinen, die ich für die Manipulation von Hex, Klartext und Binärcode geschrieben habe, ich hoffe, sie helfen. Da ich Ideen aus diesen Threads entlehnt habe, dachte ich, ich würde sie teilen.

public static String zero_pad_bin_char(String bin_char){
    int len = bin_char.length();
    if(len == 8) return bin_char;
    String zero_pad = "0";
    for(int i=1;i<8-len;i++) zero_pad = zero_pad + "0"; 
    return zero_pad + bin_char;
}
public static String plaintext_to_binary(String pt){
    return hex_to_binary(plaintext_to_hex(pt));
}
public static String binary_to_plaintext(String bin){
    return hex_to_plaintext(binary_to_hex(bin));
}
public static String plaintext_to_hex(String pt) {
    String hex = "";
    for(int i=0;i<pt.length();i++){
        String hex_char = Integer.toHexString(pt.charAt(i));
        if(i==0) hex = hex_char;
        else hex = hex + hex_char;
    }
    return hex;  
}
public static String binary_to_hex(String binary) {
    String hex = "";
    String hex_char;
    int len = binary.length()/8;
    for(int i=0;i<len;i++){
        String bin_char = binary.substring(8*i,8*i+8);
        int conv_int = Integer.parseInt(bin_char,2);
        hex_char = Integer.toHexString(conv_int);
        if(i==0) hex = hex_char;
        else hex = hex+hex_char;
    }
    return hex;
}
public static String hex_to_binary(String hex) {
    String hex_char,bin_char,binary;
    binary = "";
    int len = hex.length()/2;
    for(int i=0;i<len;i++){
        hex_char = hex.substring(2*i,2*i+2);
        int conv_int = Integer.parseInt(hex_char,16);
        bin_char = Integer.toBinaryString(conv_int);
        bin_char = zero_pad_bin_char(bin_char);
        if(i==0) binary = bin_char; 
        else binary = binary+bin_char;
        //out.printf("%s %s\n", hex_char,bin_char);
    }
    return binary;
}
public static String hex_to_plaintext(String hex) {
    String hex_char;
    StringBuilder plaintext = new StringBuilder();
    char pt_char;
    int len = hex.length()/2;
    for(int i=0;i<len;i++){
        hex_char = hex.substring(2*i,2*i+2);
        pt_char = (char)Integer.parseInt(hex_char,16);
        plaintext.append(pt_char);
        //out.printf("%s %s\n", hex_char,bin_char);
    }
    return plaintext.toString();
}

}

5voto

user802421 Punkte 7415

Sie müssen die anderen Integer.parseInt() Methode.

Integer.parseInt(hex, 16);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X