2016-04-04 8 views
0

Unten ist ein Ausschnitt meines Java-Codes.java - Erzwingen 4-stellige hexadezimale Darstellung einer Binärzahl

//converts a binary string to hexadecimal 
public static String binaryToHex (String binaryNumber) 
{ 
    BigInteger temp = new BigInteger(binaryNumber, 2); 
     return temp.toString(16).toUpperCase(); 
} 

Wenn ich Eingang „0000 1001 0101 0111“ (ohne Leerzeichen) als meinen String binäre_Zahl, der Rückgabewert 957. ist aber ideal, was ich will, ist 0957 statt nur 957. Wie kann ich sicher machen Pad mit Nullen, wenn Hex-Nummer nicht 4 Ziffern ist? Danke.

Antwort

0

Sie einer der folgenden Schritte aus:

  • manuell Pad mit Nullen
  • Verwenden String.format()

manuell Pad mit Nullen

Da Sie zusätzliche führenden wollen Nullen wenn kürzer als 4-stellig, verwenden Sie diese:

BigInteger temp = new BigInteger(binaryNumber, 2); 
String hex = temp.toString(16).toUpperCase(); 
if (hex.length() < 4) 
    hex = "000".substring(hex.length() - 1) + hex; 
return hex; 

Verwenden String.format()

BigInteger temp = new BigInteger(binaryNumber, 2); 
return String.format("%04X", temp); 

Hinweis, wenn Sie nur den Wert erwartet 4 hexadezimalen Ziffern lang sein, dann eine regelmäßige int kann den Wert halten. Keine Notwendigkeit, BigInteger zu verwenden.

In Java 8, tun Sie es, indem Sie den Binäreingang als unsigned Zahl Parsen:

int temp = Integer.parseUnsignedInt(binaryNumber, 2); 
return String.format("%04X", temp); 
+0

Nur darauf hingewiesen, dass (für die Lösung zum manuellen Auffüllen), wenn die Eingabezeichenfolge einem Hexadezimalwert mit mehr als 4 Ziffern entspricht, wird es nicht gepuffert werden. Aber Sie haben in Ihrem Kommentar bemerkt, dass dies für weniger als 4 Ziffern ist. –

+0

@JoseCifuentes Die Anforderung bestand lediglich darin, mindestens 4 Ziffern zu erzwingen. Wenn mehr als 4, was sollte es tun? Inkremente von 2 können sinnvoll sein, aber in Schritten von 4? Exponenten von 2 (4,8,16,32, ...)? Es ist nicht definiert/angefordert, so dass dies nur deckt, was angefordert wurde. Oh, und FYI, * alle 3 * Beispiele machen das gleiche: Zero-Pad auf mindestens 4 Hex-Ziffern, aber erlauben so viele wie für größere Zahlen benötigt wird. – Andreas

+1

Das ist in Ordnung.Ich dachte nur, dass der Anforderer aus der ursprünglichen Problembeschreibung die Ausgabe mit der ursprünglichen Anzahl von führenden Nullen in der binären Zeichenfolge korrelieren wollte (ist schließlich eine Zeichenfolge). So habe ich es interpretiert, daher meine Antwort. –

0

Die BigInteger wird eine interne Maschine Darstellung unabhängig von Wert, den Sie als String im binären Format übergeben. Daher weiß die Maschine nicht, wie viele führende Nullen Sie im Ausgabeformat haben möchten. Leider erlaubt die Methode toString in BigInteger keine Formatierung. Sie müssten dies also manuell tun, wenn Sie versuchen, den angezeigten Code zu verwenden.

maßgeschneiderte ich Ihren Code ein wenig Null zählen führenden basierend auf Eingabestring:

public static void main(String[] args) { 
    System.out.println(binaryToHex("0000100101010111")); 
} 
public static String binaryToHex(String binaryNumber) { 
    BigInteger temp = new BigInteger(binaryNumber, 2); 
    String hexStr = temp.toString(16).toUpperCase(); 
    int b16inLen = binaryNumber.length()/4; 
    int b16outLen = hexStr.length(); 
    int b16padding = b16inLen - b16outLen; 
    for (int i=0; i<b16padding; i++) { 
     hexStr=('0'+hexStr); 
    } 
    return hexStr; 
} 

Beachten Sie, dass die oben genannte Lösung zählt die Base16 Ziffern im Eingabe und berechnet die Differenz mit den Base16 Ziffern in der Ausgabe . Daher muss der Benutzer eine vollständige '0000' eingeben, um hochgezählt zu werden. Das heißt, "000 1111" wird als "F" angezeigt, während "0000 1111" als "0F" angezeigt wird.

Verwandte Themen