C#将整数转换为hex,然后再返回

我怎样才能转换以下?

2934(整数)到B76(hex)

让我解释一下我正在做的事情。 我有我的数据库中的用户ID存储为整数。 而不是让用户引用他们的ID我想让他们使用hex值。 主要原因是因为它更短。

所以我不仅需要从整数到hex,但我也需要从hex到整数。

有没有一种简单的方法在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); 

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

使用:

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

有关更多信息和示例,请参阅如何在hexstring和数字types之间进行转换(C#编程指南)

尝试以下操作将其转换为hex

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

又回来了

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

不过,我真的质疑这个价值。 你所说的目标是使价值变得更短,但这本身并不是目标。 你的意思是让它更容易记住或更容易input。

如果你的意思是比较容易记住的话,那你倒退一步。 我们知道它仍然是相同的大小,只是编码不同。 但是你的用户不会知道这些字母是被限制在“A-F”上的,所以这个ID将占据相同的概念空间,就好像字母“AZ”被允许一样。 所以不要像记忆一个电话号码一样,更像记忆一个GUID(等长)。

如果你的意思是打字,而不是能够使用键盘,用户现在必须使用键盘的主要部分。 打字可能会比较困难,因为这不会是他们手指认出的词。

一个更好的select是让他们select一个真正的用户名。

以hex:

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

以int:

 int intValue = int.Parse(hex, System.Globalization.NumberStyles.HexNumber) 
 int valInt = 12; Console.WriteLine(valInt.ToString("X")); // C ~ possibly single-digit output Console.WriteLine(valInt.ToString("X2")); // 0C ~ allways double-digit output 

我创build了我自己的解决scheme,将int转换为hexstring,然后再find这个答案。 毫不奇怪,它比.net解决scheme快得多,因为代码开销较小。

  /// <summary> /// Convert an integer to a string of hexidecimal numbers. /// </summary> /// <param name="n">The int to convert to Hex representation</param> /// <param name="len">number of digits in the hex string. Pads with leading zeros.</param> /// <returns></returns> 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); } /// <summary> /// Convert a byte to a hexidecimal char /// </summary> /// <param name="b"></param> /// <returns></returns> 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); } /// <summary> /// Convert a hexidecimal string to an base 10 integer /// </summary> /// <param name="str"></param> /// <returns></returns> 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; } /// <summary> /// Convert a hex char to it an integer. /// </summary> /// <param name="ch"></param> /// <returns></returns> 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; } 

时间码:

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

结果:

 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 

一个时髦的迟到的回应,但你有没有考虑某种Integer缩短实施? 如果唯一的目标是尽可能缩短用户ID,那么我有兴趣知道是否有其他明显的原因需要hex转换 – 除非我错过了。 是否清楚并知道(如果需要)用户ID实际上是实际值的hex表示?

int到hex:

int a = 72;

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

hex到int:

int b = 0xB76;

Console.WriteLine(b)中;