C # converte il numero intero in esadecimale e viceversa

Come posso convertire quanto segue?

2934 (numero intero) a B76 (esadecimale)

Lascia che ti spieghi cosa sto cercando di fare. Ho degli ID utente nel mio database che sono memorizzati come numeri interi. Piuttosto che avere utenti che fanno riferimento ai loro ID, voglio lasciargli usare il valore esadecimale. Il motivo principale è perché è più breve.

Quindi non solo ho bisogno di passare dal numero intero all’esagono, ma ho anche bisogno di passare da esadecimale a intero.

C’è un modo semplice per farlo in C #?

// 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); 

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

Uso:

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

Vedi Come: Convertire tra stringhe esadecimali e tipi numerici (C # Programming Guide) per ulteriori informazioni ed esempi.

Prova quanto segue per convertirlo in esadecimale

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

E di nuovo indietro

 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); } 
 string HexFromID(int ID) { return ID.ToString("X"); } int IDFromHex(string HexID) { return int.Parse(HexID, System.Globalization.NumberStyles.HexNumber); } 

Mi chiedo davvero il valore di questo, però. L’objective dichiarato è quello di rendere il valore più breve, ma lo è, ma non è un objective in sé. Significa davvero rendere più facile la memorizzazione o più facile la digitazione.

Se intendi più facile da ricordare, allora stai facendo un passo indietro. Sappiamo che è sempre della stessa dimensione, solo codificata in modo diverso. Ma i tuoi utenti non sapranno che le lettere sono limitate a “A-F”, e quindi l’ID occuperà lo stesso spazio concettuale per loro come se fosse consentita la lettera “AZ”. Quindi, invece di essere come memorizzare un numero di telefono, è più come memorizzare un GUID (di lunghezza equivalente).

Se intendi digitare, invece di essere in grado di utilizzare la tastiera, l’utente deve ora utilizzare la parte principale della tastiera. È probabile che sia più difficile da digitare, perché non sarà una parola che le dita riconoscono.

Un’opzione molto migliore è quella di permettere loro di scegliere un vero nome utente.

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

In esadecimale:

 string hex = intValue.ToString("X"); 

Per int:

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

Ho creato la mia soluzione per convertire int a stringa Hex e viceversa prima di trovare questa risposta. Non sorprendentemente, è notevolmente più veloce della soluzione .net dal momento che c’è un minor carico di codice.

  ///  /// Convert an integer to a string of hexidecimal numbers. ///  /// The int to convert to Hex representation /// number of digits in the hex string. Pads with leading zeros. ///  private static String IntToHexString(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 String(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 string to an base 10 integer ///  ///  ///  private static int HexStringToInt(String 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; } 

Codice di tempo:

 static void Main(string[] 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(); } 

risultati:

 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 

Una risposta alla moda tardiva, ma hai considerato una sorta di implementazione accorciata di Integer ? Se l’unico objective è rendere l’ID utente il più breve ansible, sarei interessato a sapere se c’è qualche altra ragione apparente per cui si richiede specificamente la conversione esadecimale, a meno che non mi sia sfuggito, ovviamente. È chiaro e noto (se richiesto) che gli ID utente sono in realtà una rappresentazione esadecimale del valore reale?

int all’esagono:

int a = 72;

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

hex to int:

int b = 0xB76;

Console.WriteLine (b);