2013-08-06 20 views
9

Ich muss einen Int in einen Hex-Wert konvertieren. Dies ist zum Beispiel der int-Wert:android int zu hex konvertieren

int_value = -13516; 

zu einem Hex-Wert zu konvertieren i tun:

hex_value = Integer.toHexString(int_value); 

Der Wert, den ich bekommen sollte, ist: -34CC (ich weiß nicht, ob ich machen sollte es ist positiv).

Die Sache ist die, dass die Umwandlung auf diese Weise zu tun, den Wert, den ich erhalte, ist: ffff cb34

Kann ich nicht mit dieser Funktion diese Umwandlung machen?

+0

Es hat die Umwandlung zu machen! Es gab Ihnen die hexadezimale Darstellung des Wertes, bei dem das Vorzeichenbit gesetzt ist, weil es negativ ist. Android verwendet das Zweierkomplement, um negative ganze Zahlen darzustellen: ein negativer Wert wird durch das am weitesten links gesetzte Bit dargestellt, und ein positiver Wert wird durch das am weitesten links liegende Bit dargestellt, das nicht gesetzt ist. Siehe [Vorzeichennummern-Darstellung] (https://en.wikipedia.org/wiki/Signed_number_representations). Ich weiß, das ist zwei Jahre alt, aber ein solides Verständnis der zugrunde liegenden Mechanismen ist eine wertvolle Sache für Programmierer zu haben. :) –

+0

@LorneLaliberte Es ist immer noch unerwartet, wenn (zum Beispiel) Sie einen C-Hintergrund haben, wo printf% X Format-Spezifizierer Ihnen eine vorzeichenlose hexadezimale Darstellung der Zahl geben würde, die Sie füttert, signiert oder nicht. Schlimmer noch, Java hat nicht einmal * unsigned Integer-Typen, so dass Sie es nicht einmal so beheben können! – Michael

+0

@Micheal gibt es in diesem Fall keinen Unterschied zwischen C und Java, tatsächlich liefert Java auch einen vorzeichenlosen Wert.Die Bits (und somit die hexadezimale Darstellung dieser Bits) sind in beiden Richtungen gleich. "Signed" und "Unsigned" sind nur unterschiedliche Interpretationen der Bits. Ich denke, dass Sie Ihre Erinnerung an die 'sprintf'-Funktion von C auffrischen möchten, da der'% X'-Spezifizierer in beiden Sprachen gleich funktioniert. –

Antwort

18

Dokumentation sagt Integer.toHexString gibt die hexadezimale Darstellung des int als Wert ohne Vorzeichen.

Ich glaube wird erreichen, was Sie wollen.

+0

Für den Moment habe ich versucht und es scheint den richtigen Weg zu machen! – masmic

1

Gehen Sie durch folgenden Code für Integer verhexen und Hex auf Integer-Umwandlung

public class MainActivity extends Activity { 

int number; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    number = 678668; 
    Log.i("ACT", "Integer Number " + number); 

    /** 
    * Code for convert integer number to hex number. two mwthods. 
    */ 
    Log.i("ACT", String.format("#%x", number)); // use lower case x for 
               // lowercase hex 
    Log.i("ACT", "#" + Integer.toHexString(number)); 

    /** 
    * Code for convert hex number to integer number 
    */ 
    String hex = Integer.toHexString(number).replace("/^#/", ""); 
    int intValue = Integer.parseInt(hex, 16); 

    Log.i("ACT", "Integer Number " + intValue); 
    } 

} 
3
public static int convert(int n) { 
    return Integer.valueOf(String.valueOf(n), 16); 
} 
// in onstart: 
Log.v("TAG", convert(20) + ""); // 32 
Log.v("TAG", convert(54) + ""); // 84 

Von: Java Convert integer to hex integer

+0

Aber machen Sie nicht die Umwandlung von hex nach int? Ich muss es anders machen, von einem vorzeichenbehafteten int zu einem hex. – masmic

+0

Sie haben Recht, es ist umgekehrt. – VM4

2

Beide Integer.toHexString sowie String.format ("% x") keine Anzeichen unterstützen. Um das Problem zu lösen, können Sie einen ternären Ausdruck verwenden:

int int_value = -13516; 
    String hex_value = int_value < 0 
         ? "-" + Integer.toHexString(-int_value) 
         : Integer.toHexString(int_value); 
1

Ich glaube nicht, die oben genannten Antworten, die Sie würde den genauen Wert für die signierten Bits. Zum Beispiel ist der Wert von 11 0B aber der Wert von -11 wäre F5 und nicht -B da 2-Komplement in das Spiel zu lösen dieses bekommt i modifizierte die obige Antwort

int int_value = -11; 
String hex_value = int_value < 0 
          ? Integer.toHexString(int_value+65536) : Integer.toHexString(int_value); 
String shortHexString = hex_value.substring(2); 

wo, 65536 2^16 Jetzt können Sie die erwarteten Ergebnisse erhalten. Glücklich Codierung :)

  • Liste item
0
String.format("#%06X", (0xFFFFFF & colorYellow)); 

Ausgang: #FFC107