C # convert inteiro para hexadecimal e vice-versa

Como posso converter o seguinte?

2934 (inteiro) para B76 (hex)

Deixe-me explicar o que estou tentando fazer. Eu tenho User IDs no meu database que são armazenados como números inteiros. Em vez de fazer com que os usuários façam referência a seus IDs, desejo que eles usem o valor hexadecimal. A principal razão é porque é mais curto.

Portanto, não só preciso ir de inteiro para hexadecimal, mas também preciso ir de hexadecimal para inteiro.

Existe uma maneira fácil de fazer isso em 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); 

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

    Usar:

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

    Consulte Como: Converter entre seqüências de caracteres hexadecimais e tipos numéricos (guia de programação C #) para obter mais informações e exemplos.

    Tente o seguinte para convertê-lo em hexadecimal

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

    E de volta

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

    Eu realmente questiono o valor disso, no entanto. Você está declarado meta é tornar o valor mais curto, o que será, mas isso não é um objective em si. Você realmente quer dizer ou tornar mais fácil de lembrar ou mais fácil de digitar.

    Se você quer dizer mais fácil de lembrar, então você está dando um passo para trás. Sabemos que ainda é do mesmo tamanho, apenas codificado de forma diferente. Mas seus usuários não saberão que as letras estão restritas a ‘A-F’ e, portanto, o ID ocupará o mesmo espaço conceitual para elas, como se a letra ‘AZ’ fosse permitida. Então, em vez de ser como memorizar um número de telefone, é mais como memorizar um GUID (de tamanho equivalente).

    Se você quer dizer digitar, em vez de poder usar o teclado, o usuário agora deve usar a parte principal do teclado. É provável que seja mais difícil de digitar, porque não será uma palavra que seus dedos reconheçam.

    Uma opção muito melhor é realmente deixá-los escolher um nome de usuário real.

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

    Para Hex:

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

    Int:

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

    Eu criei minha própria solução para converter int para string Hex e de volta antes de encontrar essa resposta. Não surpreendentemente, é consideravelmente mais rápido que a solução .net, pois há menos sobrecarga de código.

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

    Código de 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(); } 

    Resultados:

     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 

    Uma resposta de moda tardia, mas você já considerou algum tipo de implementação Integer Shortening? Se o único objective é tornar o ID do usuário o mais curto possível, eu estaria interessado em saber se existe algum outro motivo aparente para você especificamente exigir conversão hexadecimal – a menos que eu tenha perdido, é claro. É claro e conhecido (se necessário) que os IDs de usuário são, na verdade, uma representação hexadecimal do valor real?

    int para hexadecimal:

    int a = 72;

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

    hex para int:

    int b = 0xB76;

    Console.WriteLine (b);