如何在十六进制和十进制之间转换数字

发布于 2024-07-04 03:15:04 字数 31 浏览 7 评论 0原文

C# 中如何进行十六进制数和十进制数之间的转换?

How do you convert between hexadecimal numbers and decimal numbers in C#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(20

羁客 2024-07-11 03:15:05

来自 Geekpedia

// Store integer 182
int decValue = 182;

// Convert integer 182 as a hex in a string variable
string hexValue = decValue.ToString("X");

// Convert the hex string back to the number
int decAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

From Geekpedia:

// Store integer 182
int decValue = 182;

// Convert integer 182 as a hex in a string variable
string hexValue = decValue.ToString("X");

// Convert the hex string back to the number
int decAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
伪心 2024-07-11 03:15:05
String stringrep = myintvar.ToString("X");

int num = int.Parse("FF", System.Globalization.NumberStyles.HexNumber);
String stringrep = myintvar.ToString("X");

int num = int.Parse("FF", System.Globalization.NumberStyles.HexNumber);
余生共白头 2024-07-11 03:15:05

如果它是一个非常大的十六进制字符串,超出了正常整数的容量:

对于 .NET 3.5,我们可以使用 BouncyCastle 的 BigInteger 类:

String hex = "68c7b05d0000000002f8";
// results in "494809724602834812404472"
String decimal = new Org.BouncyCastle.Math.BigInteger(hex, 16).ToString();

.NET 4.0 具有 BigInteger 类。

If it's a really big hex string beyond the capacity of the normal integer:

For .NET 3.5, we can use BouncyCastle's BigInteger class:

String hex = "68c7b05d0000000002f8";
// results in "494809724602834812404472"
String decimal = new Org.BouncyCastle.Math.BigInteger(hex, 16).ToString();

.NET 4.0 has the BigInteger class.

花落人断肠 2024-07-11 03:15:05

十六进制到十进制转换

Convert.ToInt32(number, 16);

十进制到十六进制转换

int.Parse(number, System.Globalization.NumberStyles.HexNumber)

有关更多详细信息,请查看本文

Hex to Decimal Conversion

Convert.ToInt32(number, 16);

Decimal to Hex Conversion

int.Parse(number, System.Globalization.NumberStyles.HexNumber)

For more details Check this article

甲如呢乙后呢 2024-07-11 03:15:05

尝试在 C# 中使用 BigNumber - 表示任意大的有符号整数。

程序

using System.Numerics;
...
var bigNumber = BigInteger.Parse("837593454735734579347547357233757342857087879423437472347757234945743");
Console.WriteLine(bigNumber.ToString("X"));

输出

4F30DC39A5B10A824134D5B18EEA3707AC854EE565414ED2E498DCFDE1A15DA5FEB6074AE248458435BD417F06F674EB29A2CFECF

可能的异常,

ArgumentNullException - 值为 null。

FormatException - 值的格式不正确。

结论

您可以转换字符串并将值存储在 BigNumber 中,而不受数字大小的限制,除非字符串为空且非字母表

Try using BigNumber in C# - Represents an arbitrarily large signed integer.

Program

using System.Numerics;
...
var bigNumber = BigInteger.Parse("837593454735734579347547357233757342857087879423437472347757234945743");
Console.WriteLine(bigNumber.ToString("X"));

Output

4F30DC39A5B10A824134D5B18EEA3707AC854EE565414ED2E498DCFDE1A15DA5FEB6074AE248458435BD417F06F674EB29A2CFECF

Possible Exceptions,

ArgumentNullException - value is null.

FormatException - value is not in the correct format.

Conclusion

You can convert string and store a value in BigNumber without constraints about the size of the number unless the string is empty and non-analphabets

落墨 2024-07-11 03:15:05
    static string chex(byte e)                  // Convert a byte to a string representing that byte in hexadecimal
    {
        string r = "";
        string chars = "0123456789ABCDEF";
        r += chars[e >> 4];
        return r += chars[e &= 0x0F];
    }           // Easy enough...

    static byte CRAZY_BYTE(string t, int i)     // Take a byte, if zero return zero, else throw exception (i=0 means false, i>0 means true)
    {
        if (i == 0) return 0;
        throw new Exception(t);
    }

    static byte hbyte(string e)                 // Take 2 characters: these are hex chars, convert it to a byte
    {                                           // WARNING: This code will make small children cry. Rated R.
        e = e.ToUpper(); // 
        string msg = "INVALID CHARS";           // The message that will be thrown if the hex str is invalid

        byte[] t = new byte[]                   // Gets the 2 characters and puts them in seperate entries in a byte array.
        {                                       // This will throw an exception if (e.Length != 2).
            (byte)e[CRAZY_BYTE("INVALID LENGTH", e.Length ^ 0x02)], 
            (byte)e[0x01] 
        };

        for (byte i = 0x00; i < 0x02; i++)      // Convert those [ascii] characters to [hexadecimal] characters. Error out if either character is invalid.
        {
            t[i] -= (byte)((t[i] >= 0x30) ? 0x30 : CRAZY_BYTE(msg, 0x01));                                  // Check for 0-9
            t[i] -= (byte)((!(t[i] < 0x0A)) ? (t[i] >= 0x11 ? 0x07 : CRAZY_BYTE(msg, 0x01)) : 0x00);        // Check for A-F
        }           

        return t[0x01] |= t[0x00] <<= 0x04;     // The moment of truth.
    }
    static string chex(byte e)                  // Convert a byte to a string representing that byte in hexadecimal
    {
        string r = "";
        string chars = "0123456789ABCDEF";
        r += chars[e >> 4];
        return r += chars[e &= 0x0F];
    }           // Easy enough...

    static byte CRAZY_BYTE(string t, int i)     // Take a byte, if zero return zero, else throw exception (i=0 means false, i>0 means true)
    {
        if (i == 0) return 0;
        throw new Exception(t);
    }

    static byte hbyte(string e)                 // Take 2 characters: these are hex chars, convert it to a byte
    {                                           // WARNING: This code will make small children cry. Rated R.
        e = e.ToUpper(); // 
        string msg = "INVALID CHARS";           // The message that will be thrown if the hex str is invalid

        byte[] t = new byte[]                   // Gets the 2 characters and puts them in seperate entries in a byte array.
        {                                       // This will throw an exception if (e.Length != 2).
            (byte)e[CRAZY_BYTE("INVALID LENGTH", e.Length ^ 0x02)], 
            (byte)e[0x01] 
        };

        for (byte i = 0x00; i < 0x02; i++)      // Convert those [ascii] characters to [hexadecimal] characters. Error out if either character is invalid.
        {
            t[i] -= (byte)((t[i] >= 0x30) ? 0x30 : CRAZY_BYTE(msg, 0x01));                                  // Check for 0-9
            t[i] -= (byte)((!(t[i] < 0x0A)) ? (t[i] >= 0x11 ? 0x07 : CRAZY_BYTE(msg, 0x01)) : 0x00);        // Check for A-F
        }           

        return t[0x01] |= t[0x00] <<= 0x04;     // The moment of truth.
    }
苯莒 2024-07-11 03:15:05

这并不是最简单的方法,但此源代码使您能够纠正任何类型的八进制数,即 23.214、23 和 0.512 等。 希望对你有帮助..

    public string octal_to_decimal(string m_value)
    {
        double i, j, x = 0;
        Int64 main_value;
        int k = 0;
        bool pw = true, ch;
        int position_pt = m_value.IndexOf(".");
        if (position_pt == -1)
        {
            main_value = Convert.ToInt64(m_value);
            ch = false;
        }
        else
        {
            main_value = Convert.ToInt64(m_value.Remove(position_pt, m_value.Length - position_pt));
            ch = true;
        }

        while (k <= 1)
        {
            do
            {
                i = main_value % 10;                                        // Return Remainder
                i = i * Convert.ToDouble(Math.Pow(8, x));                   // calculate power
                if (pw)
                    x++;
                else
                    x--;
                o_to_d = o_to_d + i;                                        // Saving Required calculated value in main variable
                main_value = main_value / 10;                               // Dividing the main value 
            }
            while (main_value >= 1);
            if (ch)
            {
                k++;
                main_value = Convert.ToInt64(Reversestring(m_value.Remove(0, position_pt + 1)));
            }
            else
                k = 2;
            pw = false;
            x = -1;
        }
        return (Convert.ToString(o_to_d));
    }    

This is not really easiest way but this source code enable you to right any types of octal number i.e 23.214, 23 and 0.512 and so on. Hope this will help you..

    public string octal_to_decimal(string m_value)
    {
        double i, j, x = 0;
        Int64 main_value;
        int k = 0;
        bool pw = true, ch;
        int position_pt = m_value.IndexOf(".");
        if (position_pt == -1)
        {
            main_value = Convert.ToInt64(m_value);
            ch = false;
        }
        else
        {
            main_value = Convert.ToInt64(m_value.Remove(position_pt, m_value.Length - position_pt));
            ch = true;
        }

        while (k <= 1)
        {
            do
            {
                i = main_value % 10;                                        // Return Remainder
                i = i * Convert.ToDouble(Math.Pow(8, x));                   // calculate power
                if (pw)
                    x++;
                else
                    x--;
                o_to_d = o_to_d + i;                                        // Saving Required calculated value in main variable
                main_value = main_value / 10;                               // Dividing the main value 
            }
            while (main_value >= 1);
            if (ch)
            {
                k++;
                main_value = Convert.ToInt64(Reversestring(m_value.Remove(0, position_pt + 1)));
            }
            else
                k = 2;
            pw = false;
            x = -1;
        }
        return (Convert.ToString(o_to_d));
    }    
我的奇迹 2024-07-11 03:15:05

这对我有用:

public static decimal HexToDec(string hex)
{
  if (hex.Length % 2 == 1)
    hex = "0" + hex;
  byte[] raw = new byte[hex.Length / 2];
  decimal d = 0;
    for (int i = 0; i < raw.Length; i++)
    {
      raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
      d += Math.Pow(256, (raw.Length - 1 - i)) * raw[i];
    }
    return d.ToString();
  return d;
}

This one worked for me:

public static decimal HexToDec(string hex)
{
  if (hex.Length % 2 == 1)
    hex = "0" + hex;
  byte[] raw = new byte[hex.Length / 2];
  decimal d = 0;
    for (int i = 0; i < raw.Length; i++)
    {
      raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
      d += Math.Pow(256, (raw.Length - 1 - i)) * raw[i];
    }
    return d.ToString();
  return d;
}
謸气贵蔟 2024-07-11 03:15:05

十进制 - 十六进制

        var decValue = int.Parse(Console.ReadLine());
        string hex = string.Format("{0:x}", decValue);
        Console.WriteLine(hex);

十六进制 - 十进制(使用命名空间:using System.Globalization;)

        var hexval = Console.ReadLine();
        int decValue = int.Parse(hexval, NumberStyles.HexNumber);
        Console.WriteLine(decValue);

Decimal - Hexa

        var decValue = int.Parse(Console.ReadLine());
        string hex = string.Format("{0:x}", decValue);
        Console.WriteLine(hex);

Hexa - Decimal (use namespace: using System.Globalization;)

        var hexval = Console.ReadLine();
        int decValue = int.Parse(hexval, NumberStyles.HexNumber);
        Console.WriteLine(decValue);
冷月断魂刀 2024-07-11 03:15:05

将十六进制与十进制相互转换的四种 C# 原生方法:

using System;

namespace Hexadecimal_and_Decimal
{
  internal class Program
  {
    private static void Main(string[] args)
    {
      string hex = "4DEAD";
      int dec;

      // hex to dec:
      dec = int.Parse(hex, System.Globalization.NumberStyles.HexNumber);
      // or:
      dec = Convert.ToInt32(hex, 16);

      // dec to hex:
      hex = dec.ToString("X"); // lowcase: x, uppercase: X
      // or:
      hex = string.Format("{0:X}", dec); // lowcase: x, uppercase: X

      Console.WriteLine("Hexadecimal number: " + hex);
      Console.WriteLine("Decimal number: " + dec);
    }
  }
}

FOUR C# native ways to convert Hex to Dec and back:

using System;

namespace Hexadecimal_and_Decimal
{
  internal class Program
  {
    private static void Main(string[] args)
    {
      string hex = "4DEAD";
      int dec;

      // hex to dec:
      dec = int.Parse(hex, System.Globalization.NumberStyles.HexNumber);
      // or:
      dec = Convert.ToInt32(hex, 16);

      // dec to hex:
      hex = dec.ToString("X"); // lowcase: x, uppercase: X
      // or:
      hex = string.Format("{0:X}", dec); // lowcase: x, uppercase: X

      Console.WriteLine("Hexadecimal number: " + hex);
      Console.WriteLine("Decimal number: " + dec);
    }
  }
}
陌上青苔 2024-07-11 03:15:05

十六进制 -> 小数:

Convert.ToInt64(hexString, 16);

小数-> 十六进制

string.Format("{0:x}", intValue);

Hex -> decimal:

Convert.ToInt64(hexString, 16);

Decimal -> Hex

string.Format("{0:x}", intValue);
始于初秋 2024-07-11 03:15:05

看起来你可以说

Convert.ToInt64(value, 16)

从十六进制得到十进制。

另一种方法是:

otherVar.ToString("X");

It looks like you can say

Convert.ToInt64(value, 16)

to get the decimal from hexdecimal.

The other way around is:

otherVar.ToString("X");
╭⌒浅淡时光〆 2024-07-11 03:15:05

如果您希望在从十六进制数转换为十进制数时获得最佳性能,可以使用该方法以及预先填充的十六进制到十进制值表。

下面的代码说明了这个想法。 我的性能测试表明它可以比 Convert.ToInt32(...) 快 20%-40%:

class TableConvert
  {
      static sbyte[] unhex_table =
      { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
       ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
      };

      public static int Convert(string hexNumber)
      {
          int decValue = unhex_table[(byte)hexNumber[0]];
          for (int i = 1; i < hexNumber.Length; i++)
          {
              decValue *= 16;
              decValue += unhex_table[(byte)hexNumber[i]];
          }
          return decValue;
      }
  }

If you want maximum performance when doing conversion from hex to decimal number, you can use the approach with pre-populated table of hex-to-decimal values.

Here is the code that illustrates that idea. My performance tests showed that it can be 20%-40% faster than Convert.ToInt32(...):

class TableConvert
  {
      static sbyte[] unhex_table =
      { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       , 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
       ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
       ,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
      };

      public static int Convert(string hexNumber)
      {
          int decValue = unhex_table[(byte)hexNumber[0]];
          for (int i = 1; i < hexNumber.Length; i++)
          {
              decValue *= 16;
              decValue += unhex_table[(byte)hexNumber[i]];
          }
          return decValue;
      }
  }
冷血 2024-07-11 03:15:05

用于将字节数组转换为十六进制表示的扩展方法。 这会用前导零填充每个字节。

    /// <summary>
    /// Turns the byte array into its Hex representation.
    /// </summary>
    public static string ToHex(this byte[] y)
    {
        StringBuilder sb = new StringBuilder();
        foreach (byte b in y)
        {
            sb.Append(b.ToString("X").PadLeft(2, "0"[0]));
        }
        return sb.ToString();
    }

An extension method for converting a byte array into a hex representation. This pads each byte with leading zeros.

    /// <summary>
    /// Turns the byte array into its Hex representation.
    /// </summary>
    public static string ToHex(this byte[] y)
    {
        StringBuilder sb = new StringBuilder();
        foreach (byte b in y)
        {
            sb.Append(b.ToString("X").PadLeft(2, "0"[0]));
        }
        return sb.ToString();
    }
瞄了个咪的 2024-07-11 03:15:05

这是我的功能:

using System;
using System.Collections.Generic;
class HexadecimalToDecimal
{
    static Dictionary<char, int> hexdecval = new Dictionary<char, int>{
        {'0', 0},
        {'1', 1},
        {'2', 2},
        {'3', 3},
        {'4', 4},
        {'5', 5},
        {'6', 6},
        {'7', 7},
        {'8', 8},
        {'9', 9},
        {'a', 10},
        {'b', 11},
        {'c', 12},
        {'d', 13},
        {'e', 14},
        {'f', 15},
    };

    static decimal HexToDec(string hex)
    {
        decimal result = 0;
        hex = hex.ToLower();

        for (int i = 0; i < hex.Length; i++)
        {
            char valAt = hex[hex.Length - 1 - i];
            result += hexdecval[valAt] * (int)Math.Pow(16, i);
        }

        return result;
    }

    static void Main()
    {

        Console.WriteLine("Enter Hexadecimal value");
        string hex = Console.ReadLine().Trim();

        //string hex = "29A";
        Console.WriteLine("Hex {0} is dec {1}", hex, HexToDec(hex));

        Console.ReadKey();
    }
}

Here is my function:

using System;
using System.Collections.Generic;
class HexadecimalToDecimal
{
    static Dictionary<char, int> hexdecval = new Dictionary<char, int>{
        {'0', 0},
        {'1', 1},
        {'2', 2},
        {'3', 3},
        {'4', 4},
        {'5', 5},
        {'6', 6},
        {'7', 7},
        {'8', 8},
        {'9', 9},
        {'a', 10},
        {'b', 11},
        {'c', 12},
        {'d', 13},
        {'e', 14},
        {'f', 15},
    };

    static decimal HexToDec(string hex)
    {
        decimal result = 0;
        hex = hex.ToLower();

        for (int i = 0; i < hex.Length; i++)
        {
            char valAt = hex[hex.Length - 1 - i];
            result += hexdecval[valAt] * (int)Math.Pow(16, i);
        }

        return result;
    }

    static void Main()
    {

        Console.WriteLine("Enter Hexadecimal value");
        string hex = Console.ReadLine().Trim();

        //string hex = "29A";
        Console.WriteLine("Hex {0} is dec {1}", hex, HexToDec(hex));

        Console.ReadKey();
    }
}
饮湿 2024-07-11 03:15:05

我的解决方案有点像回归基础,但它无需使用任何内置函数即可在数字系统之间进行转换。

    public static string DecToHex(long a)
    {
        int n = 1;
        long b = a;
        while (b > 15)
        {
            b /= 16;
            n++;
        }
        string[] t = new string[n];
        int i = 0, j = n - 1;
        do
        {
                 if (a % 16 == 10) t[i] = "A";
            else if (a % 16 == 11) t[i] = "B";
            else if (a % 16 == 12) t[i] = "C";
            else if (a % 16 == 13) t[i] = "D";
            else if (a % 16 == 14) t[i] = "E";
            else if (a % 16 == 15) t[i] = "F";
            else t[i] = (a % 16).ToString();
            a /= 16;
            i++;
        }
        while ((a * 16) > 15);
        string[] r = new string[n];
        for (i = 0; i < n; i++)
        {
            r[i] = t[j];
            j--;
        }
        string res = string.Concat(r);
        return res;
    }

My solution is a bit like back to basics, but it works without using any built-in functions to convert between number systems.

    public static string DecToHex(long a)
    {
        int n = 1;
        long b = a;
        while (b > 15)
        {
            b /= 16;
            n++;
        }
        string[] t = new string[n];
        int i = 0, j = n - 1;
        do
        {
                 if (a % 16 == 10) t[i] = "A";
            else if (a % 16 == 11) t[i] = "B";
            else if (a % 16 == 12) t[i] = "C";
            else if (a % 16 == 13) t[i] = "D";
            else if (a % 16 == 14) t[i] = "E";
            else if (a % 16 == 15) t[i] = "F";
            else t[i] = (a % 16).ToString();
            a /= 16;
            i++;
        }
        while ((a * 16) > 15);
        string[] r = new string[n];
        for (i = 0; i < n; i++)
        {
            r[i] = t[j];
            j--;
        }
        string res = string.Concat(r);
        return res;
    }
丑丑阿 2024-07-11 03:15:05

将二进制转换为十六进制

Convert.ToString(Convert.ToUInt32(binary1, 2), 16).ToUpper()

Convert binary to Hex

Convert.ToString(Convert.ToUInt32(binary1, 2), 16).ToUpper()
梦里°也失望 2024-07-11 03:15:05

您可以使用此代码并可能设置十六进制长度和部分:

const int decimal_places = 4;
const int int_places = 4;
static readonly string decimal_places_format = $"X{decimal_places}";
static readonly string int_places_format = $"X{int_places}";

public static string DecimaltoHex(decimal number)
{
    var n = (int)Math.Truncate(number);
    var f = (int)Math.Truncate((number - n) * ((decimal)Math.Pow(10, decimal_places)));
    return $"{string.Format($"{{0:{int_places_format}}}", n)}{string.Format($"{{0:{decimal_places_format}}}", f)}";
}

public static decimal HextoDecimal(string number)
{
    var n = number.Substring(0, number.Length - decimal_places);
    var f = number.Substring(number.Length - decimal_places);
    return decimal.Parse($"{int.Parse(n, System.Globalization.NumberStyles.HexNumber)}.{int.Parse(f, System.Globalization.NumberStyles.HexNumber)}");
}

You can use this code and possible set Hex length and part's:

const int decimal_places = 4;
const int int_places = 4;
static readonly string decimal_places_format = 
quot;X{decimal_places}";
static readonly string int_places_format = 
quot;X{int_places}";

public static string DecimaltoHex(decimal number)
{
    var n = (int)Math.Truncate(number);
    var f = (int)Math.Truncate((number - n) * ((decimal)Math.Pow(10, decimal_places)));
    return 
quot;{string.Format(
quot;{{0:{int_places_format}}}", n)}{string.Format(
quot;{{0:{decimal_places_format}}}", f)}";
}

public static decimal HextoDecimal(string number)
{
    var n = number.Substring(0, number.Length - decimal_places);
    var f = number.Substring(number.Length - decimal_places);
    return decimal.Parse(
quot;{int.Parse(n, System.Globalization.NumberStyles.HexNumber)}.{int.Parse(f, System.Globalization.NumberStyles.HexNumber)}");
}
余生一个溪 2024-07-11 03:15:05

我的版本是我认为更容易理解的,因为我的 C# 知识不是那么高。
我正在使用这个算法: http://easyguyevo.hubpages.com/hub/将十六进制转换为十进制(示例 2)

using System;
using System.Collections.Generic;

static class Tool
{
    public static string DecToHex(int x)
    {
        string result = "";

        while (x != 0)
        {
            if ((x % 16) < 10)
                result = x % 16 + result;
            else
            {
                string temp = "";

                switch (x % 16)
                {
                    case 10: temp = "A"; break;
                    case 11: temp = "B"; break;
                    case 12: temp = "C"; break;
                    case 13: temp = "D"; break;
                    case 14: temp = "E"; break;
                    case 15: temp = "F"; break;
                }

                result = temp + result;
            }

            x /= 16;
        }

        return result;
    }

    public static int HexToDec(string x)
    {
        int result = 0;
        int count = x.Length - 1;
        for (int i = 0; i < x.Length; i++)
        {
            int temp = 0;
            switch (x[i])
            {
                case 'A': temp = 10; break;
                case 'B': temp = 11; break;
                case 'C': temp = 12; break;
                case 'D': temp = 13; break;
                case 'E': temp = 14; break;
                case 'F': temp = 15; break;
                default: temp = -48 + (int)x[i]; break; // -48 because of ASCII
            }

            result += temp * (int)(Math.Pow(16, count));
            count--;
        }

        return result;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.Write("Enter Decimal value: ");
        int decNum = int.Parse(Console.ReadLine());

        Console.WriteLine("Dec {0} is hex {1}", decNum, Tool.DecToHex(decNum));

        Console.Write("\nEnter Hexadecimal value: ");
        string hexNum = Console.ReadLine().ToUpper();

        Console.WriteLine("Hex {0} is dec {1}", hexNum, Tool.HexToDec(hexNum));

        Console.ReadKey();
    }
}

My version is I think a little more understandable because my C# knowledge is not so high.
I'm using this algorithm: http://easyguyevo.hubpages.com/hub/Convert-Hex-to-Decimal (The Example 2)

using System;
using System.Collections.Generic;

static class Tool
{
    public static string DecToHex(int x)
    {
        string result = "";

        while (x != 0)
        {
            if ((x % 16) < 10)
                result = x % 16 + result;
            else
            {
                string temp = "";

                switch (x % 16)
                {
                    case 10: temp = "A"; break;
                    case 11: temp = "B"; break;
                    case 12: temp = "C"; break;
                    case 13: temp = "D"; break;
                    case 14: temp = "E"; break;
                    case 15: temp = "F"; break;
                }

                result = temp + result;
            }

            x /= 16;
        }

        return result;
    }

    public static int HexToDec(string x)
    {
        int result = 0;
        int count = x.Length - 1;
        for (int i = 0; i < x.Length; i++)
        {
            int temp = 0;
            switch (x[i])
            {
                case 'A': temp = 10; break;
                case 'B': temp = 11; break;
                case 'C': temp = 12; break;
                case 'D': temp = 13; break;
                case 'E': temp = 14; break;
                case 'F': temp = 15; break;
                default: temp = -48 + (int)x[i]; break; // -48 because of ASCII
            }

            result += temp * (int)(Math.Pow(16, count));
            count--;
        }

        return result;
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.Write("Enter Decimal value: ");
        int decNum = int.Parse(Console.ReadLine());

        Console.WriteLine("Dec {0} is hex {1}", decNum, Tool.DecToHex(decNum));

        Console.Write("\nEnter Hexadecimal value: ");
        string hexNum = Console.ReadLine().ToUpper();

        Console.WriteLine("Hex {0} is dec {1}", hexNum, Tool.HexToDec(hexNum));

        Console.ReadKey();
    }
}
眉黛浅 2024-07-11 03:15:04

要从十进制转换为十六进制,请执行...

string hexValue = decValue.ToString("X");

要从十六进制转换为十进制,请执行...

int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

int decValue = Convert.ToInt32(hexValue, 16);

To convert from decimal to hex do...

string hexValue = decValue.ToString("X");

To convert from hex to decimal do either...

int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

or

int decValue = Convert.ToInt32(hexValue, 16);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文