C # convertit l’entier en hexadécimal et retourne

Comment puis-je convertir les éléments suivants?

2934 (entier) à B76 (hex)

Laissez-moi vous expliquer ce que j’essaie de faire. J’ai des identifiants d’utilisateur dans ma firebase database qui sont stockés sous forme d’entiers. Plutôt que de demander aux utilisateurs de référencer leurs identifiants, je souhaite les laisser utiliser la valeur hexadécimale. La raison principale est que c’est plus court.

Donc, non seulement je dois passer d’un nombre entier à un hexadécimal, mais je dois aussi passer de l’hex à l’entier.

Y a-t-il un moyen facile de le faire en C #?

    // Store integer 182 int intValue = 182; // Convert integer 182 as a hex in a ssortingng variable ssortingng hexValue = intValue.ToSsortingng("X"); // Convert the hex ssortingng back to the number int intAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber); 

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

    Utilisation:

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

    Voir Comment: convertir entre des chaînes hexadécimales et des types numériques (Guide de programmation C #) pour plus d’informations et d’exemples.

    Essayez ce qui suit pour le convertir en hexadécimal

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

    Et de retour

     public static int FromHex(ssortingng value) { // ssortingp the leading 0x if ( value.StartsWith("0x", SsortingngComparison.OrdinalIgnoreCase)) { value = value.Subssortingng(2); } return Int32.Parse(value, NumberStyles.HexNumber); } 
     ssortingng HexFromID(int ID) { return ID.ToSsortingng("X"); } int IDFromHex(ssortingng HexID) { return int.Parse(HexID, System.Globalization.NumberStyles.HexNumber); } 

    Je remets vraiment en question la valeur de cela, cependant. Votre objective est de réduire la valeur, ce qui sera le cas, mais ce n’est pas un objective en soi. Vous voulez vraiment dire soit rendre plus facile à retenir ou plus facile à taper.

    Si vous voulez dire plus facile à retenir, vous faites un pas en arrière. Nous soaps que c’est toujours la même taille, juste encodé différemment. Mais vos utilisateurs ne sauront pas que les lettres sont limitées à «A-F», et l’ID occupera donc le même espace conceptuel que si la lettre «AZ» était autorisée. Donc, au lieu d’être comme mémoriser un numéro de téléphone, cela ressemble plus à la mémorisation d’un GUID (de longueur équivalente).

    Si vous voulez dire taper, au lieu de pouvoir utiliser le clavier, l’utilisateur doit maintenant utiliser la partie principale du clavier. C’est probablement plus difficile à taper, car ce ne sera pas un mot que leurs doigts reconnaîtront.

    Une meilleure option est de leur laisser choisir un vrai nom d’utilisateur.

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

    Au sortilège:

     ssortingng hex = intValue.ToSsortingng("X"); 

    Pour int:

     int intValue = int.Parse(hex, System.Globalization.NumberStyles.HexNumber) 

    J’ai créé ma propre solution pour convertir int en chaîne hexadécimale et revenir avant que je trouve cette réponse. Sans surprise, il est beaucoup plus rapide que la solution .net car il y a moins de surcharge de code.

      ///  /// Convert an integer to a ssortingng of hexidecimal numbers. ///  /// The int to convert to Hex representation /// number of digits in the hex ssortingng. Pads with leading zeros. ///  private static Ssortingng IntToHexSsortingng(int n, int len) { char[] ch = new char[len--]; for (int i = len; i >= 0; i--) { ch[len - i] = ByteToHexChar((byte)((uint)(n >> 4 * i) & 15)); } return new Ssortingng(ch); } ///  /// Convert a byte to a hexidecimal char ///  ///  ///  private static char ByteToHexChar(byte b) { if (b < 0 || b > 15) throw new Exception("IntToHexChar: input out of range for Hex value"); return b < 10 ? (char)(b + 48) : (char)(b + 55); } ///  /// Convert a hexidecimal ssortingng to an base 10 integer ///  ///  ///  private static int HexSsortingngToInt(Ssortingng str) { int value = 0; for (int i = 0; i < str.Length; i++) { value += HexCharToInt(str[i]) << ((str.Length - 1 - i) * 4); } return value; } ///  /// Convert a hex char to it an integer. ///  ///  ///  private static int HexCharToInt(char ch) { if (ch < 48 || (ch > 57 && ch < 65) || ch > 70) throw new Exception("HexCharToInt: input out of range for Hex value"); return (ch < 58) ? ch - 48 : ch - 55; } 

    Code de synchronisation:

     static void Main(ssortingng[] args) { int num = 3500; long start = System.Diagnostics.Stopwatch.GetTimestamp(); for (int i = 0; i < 2000000; i++) if (num != HexStringToInt(IntToHexString(num, 3))) Console.WriteLine(num + " = " + HexStringToInt(IntToHexString(num, 3))); long end = System.Diagnostics.Stopwatch.GetTimestamp(); Console.WriteLine(((double)end - (double)start)/(double)System.Diagnostics.Stopwatch.Frequency); for (int i = 0; i < 2000000; i++) if (num != Convert.ToInt32(num.ToString("X3"), 16)) Console.WriteLine(i); end = System.Diagnostics.Stopwatch.GetTimestamp(); Console.WriteLine(((double)end - (double)start)/(double)System.Diagnostics.Stopwatch.Frequency); Console.ReadLine(); } 

    Résultats:

     Digits : MyCode : .Net 1 : 0.21 : 0.45 2 : 0.31 : 0.56 4 : 0.51 : 0.78 6 : 0.70 : 1.02 8 : 0.90 : 1.25 

    Une réponse tardive à la mode, mais avez-vous envisagé une sorte de raccourcissement de la mise en œuvre Integer ? Si le seul but est de rendre l’ID utilisateur aussi court que possible, je serais intéressé de savoir s’il existe une autre raison apparente pour laquelle vous avez spécifiquement besoin d’une conversion hexadécimale – à moins que cela ne me manque bien sûr. Est-il clair et connu (si nécessaire) que les identifiants utilisateurs sont en réalité une représentation hexadécimale de la valeur réelle?

    int à hexadécimal:

    int a = 72;

    Console.WriteLine (“{0: X}”, a);

    hex à int:

    int b = 0xB76;

    Console.WriteLine (b);