Как преобразовать числа между шестнадцатеричным и десятичным - PullRequest
136 голосов
/ 16 сентября 2008

Как конвертировать шестнадцатеричные и десятичные числа в C #?

Ответы [ 17 ]

261 голосов
/ 16 сентября 2008

Чтобы преобразовать десятичное число в шестнадцатеричное, сделайте ...

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

Чтобы преобразовать из шестнадцатеричного в десятичное, сделайте либо ...

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

или

int decValue = Convert.ToInt32(hexValue, 16);
50 голосов
/ 16 сентября 2008

Шестнадцатеричный -> десятичный:

Convert.ToInt64(hexValue, 16);

Десятичное число -> Шестнадцатеричное

string.format("{0:x}", decValue);
26 голосов
/ 16 сентября 2008

Похоже, вы можете сказать

Convert.ToInt64(value, 16)

чтобы получить десятичное число из шестнадцатеричного числа.

И наоборот:

otherVar.ToString("X");
12 голосов
/ 03 февраля 2012

Если вам нужна максимальная производительность при преобразовании шестнадцатеричного числа в шестнадцатеричное, вы можете использовать подход с предварительно заполненной таблицей шестнадцатеричных значений.

Вот код, который иллюстрирует эту идею. Мои тесты производительности показали, что он может быть на 20-40% быстрее, чем 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;
      }
  }
4 голосов
/ 16 сентября 2008

Из 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);
2 голосов
/ 22 мая 2017

Преобразование шестнадцатеричного в десятичное

Convert.ToInt32(number, 16);

Преобразование десятичного числа в шестнадцатеричное

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

Для более подробной информации проверьте эту статью

2 голосов
/ 18 декабря 2010

Это не самый простой способ, но этот исходный код позволяет вам исправить любые типы восьмеричных чисел, то есть 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));
    }    
2 голосов
/ 20 марта 2010
    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.
    }
2 голосов
/ 16 сентября 2008
String stringrep = myintvar.ToString("X");

int num = int.Parse("FF", System.Globalization.NumberStyles.HexNumber);
1 голос
/ 30 марта 2018

Попробуйте использовать BigNumber в C # - представляет произвольно большое целое число со знаком.

Программа

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

выход

4F30DC39A5B10A824134D5B18EEA3707AC854EE565414ED2E498DCFDE1A15DA5FEB6074AE248458435BD417F06F674EB29A2CFECF

Возможные исключения,

ArgumentNullException - значение равно нулю.

FormatException - значение не в правильном формате.

Заключение

Вы можете преобразовать строку и сохранить значение в BigNumber без ограничений на размер числа, если строка не пуста и не содержит аналфабетов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...