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?
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. :) –
@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
@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. –