566 Stimmen

Ganzzahl in Hexadezimal umwandeln und wieder zurück

Wie kann ich das Folgende umwandeln?

2934 (ganzzahlig) bis B76 (hex)

Lassen Sie mich erklären, was ich zu tun versuche. Ich habe Benutzer-IDs in meiner Datenbank, die als Ganzzahlen gespeichert sind. Anstatt die Benutzer auf ihre IDs zu verweisen, möchte ich sie den Hex-Wert verwenden lassen. Der Hauptgrund ist, weil es kürzer ist.

Ich muss also nicht nur von Integer auf Hex umstellen, sondern auch von Hex auf Integer.

Gibt es eine einfache Möglichkeit, dies in C# zu tun?

1000voto

Gavin Miller Punkte 41976
// Store integer 182
int intValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = intValue.ToString("X");
// Convert the hex string back to the number
int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

von http://www.geekpedia.com/KB8_How-do-I-convert-from-decimal-to-hex-and-hex-to-decimal.html


TIPP (aus den Kommentaren):

Verwenden Sie .ToString("X4") um genau 4 Ziffern mit führender 0 zu erhalten, oder .ToString("x4") für Hexadezimalzahlen in Kleinbuchstaben (ebenso für mehrere Ziffern).

127voto

Scott Ivey Punkte 39470

Verwendung:

int myInt = 2934;
string myHex = myInt.ToString("X");  // Gives you hexadecimal
int myNewInt = Convert.ToInt32(myHex, 16);  // Back to int again.

Voir So geht's: Konvertieren zwischen hexadezimalen Zeichenfolgen und numerischen Typen (C#-Programmierleitfaden) für weitere Informationen und Beispiele.

69voto

JaredPar Punkte 699699

Versuchen Sie Folgendes, um es in Hex umzuwandeln

public static string ToHex(this int value) {
  return String.Format("0x{0:X}", value);
}

Und wieder zurück

public static int FromHex(string value) {
  // strip the leading 0x
  if ( value.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) {
    value = value.Substring(2);
  }
  return Int32.Parse(value, NumberStyles.HexNumber);
}

37voto

user2179382 Punkte 341
int valInt = 12;
Console.WriteLine(valInt.ToString("X"));  // C  ~ possibly single-digit output 
Console.WriteLine(valInt.ToString("X2")); // 0C ~ always double-digit output

19voto

Joel Coehoorn Punkte 377088
string HexFromID(int ID)
{
    return ID.ToString("X");
}

int IDFromHex(string HexID)
{
    return int.Parse(HexID, System.Globalization.NumberStyles.HexNumber);
}

Ich bezweifle allerdings den Wert dieser Maßnahme. Ihr erklärtes Ziel ist es, den Wert kürzer zu machen, was es auch wird, aber das ist kein Ziel an sich. Sie meinen, dass er entweder leichter zu merken oder leichter zu tippen ist.

Wenn Sie meinen, dass man sich das leichter merken kann, dann machen Sie einen Schritt zurück. Wir wissen, dass es immer noch die gleiche Größe ist, nur anders kodiert. Aber Ihre Benutzer werden nicht wissen, dass die Buchstaben auf "A-F" beschränkt sind, und so wird die ID für sie den gleichen konzeptionellen Raum einnehmen, als ob die Buchstaben "A-Z" erlaubt wären. Anstatt sich also eine Telefonnummer zu merken, ist es eher so, als würde man sich eine GUID (von gleicher Länge) merken.

Wenn Sie das Tippen meinen, muss der Benutzer statt des Tastenfelds nun den Hauptteil der Tastatur verwenden. Es ist wahrscheinlich schwieriger zu tippen, weil es kein Wort ist, das die Finger erkennen.

Eine viel bessere Option ist es, sie einen echten Benutzernamen wählen zu lassen.

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