如何转换以下内容?

2934(整数)到B76(十六进制)

让我解释一下我要做什么。我的数据库中有以整数形式存储的用户id。而不是让用户引用他们的id,我想让他们使用十六进制值。主要原因是它比较短。

所以我不仅需要从整数变成十六进制还需要从十六进制变成整数。

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

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


提示(来自评论):

使用. tostring ("X4")获得前导0的4位数字,或使用. tostring ("X4")获得小写十六进制数字(同样用于更多数字)。

其他回答

尝试以下将其转换为十六进制

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

但我真的怀疑这东西的价值。你的目标是使值更短,这是可以做到的,但这本身并不是一个目标。你的意思是要么让它更容易记,要么让它更容易打。

如果你的意思是更容易记住,那么你就后退了一步。我们知道它的大小是一样的,只是编码不同了。但是你的用户不会知道这些字母被限制为“A-F”,所以ID对他们来说将占据相同的概念空间,就像字母“A-Z”被允许一样。因此,它不像记忆电话号码,而更像记忆GUID(相同长度)。

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

一个更好的选择是让他们选择一个真实的用户名。

就像@Joel C一样,我认为这是AB问题。 有一个现有的算法,我认为更适合的需求,如所描述的,那就是uuencode,我相信它有许多公共领域的实现,也许调整以消除看起来非常类似于0/O的字符。很可能产生明显更短的字符串。我认为这就是URL缩短者使用的。

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

微软网络框架

非常好的解释和少数编程行 好工作

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

PASCAL >> c#

http://files.hddguru.com/download/Software/Seagate/St_mem.pas

从老式的pascal转换成c#的程序

    /// <summary>
    /// Conver number from Decadic to Hexadecimal
    /// </summary>
    /// <param name="w"></param>
    /// <returns></returns>
    public string MakeHex(int w)
    {
        try
        {
           char[] b =  {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
           char[] S = new char[7];

              S[0] = b[(w >> 24) & 15];
              S[1] = b[(w >> 20) & 15];
              S[2] = b[(w >> 16) & 15];
              S[3] = b[(w >> 12) & 15];
              S[4] = b[(w >> 8) & 15];
              S[5] = b[(w >> 4) & 15];
              S[6] = b[w & 15];

              string _MakeHex = new string(S, 0, S.Count());

              return _MakeHex;
        }
        catch (Exception ex)
        {

            throw;
        }
    }