How to convert numbers between hexadecimal and decimal

前端 未结 17 1079
情歌与酒
情歌与酒 2020-11-22 05:30

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

相关标签:
17条回答
  • 2020-11-22 06:05

    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.

    0 讨论(0)
  • 2020-11-22 06:05

    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;
        }
    
    0 讨论(0)
  • 2020-11-22 06:06
        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.
        }
    
    0 讨论(0)
  • 2020-11-22 06:07

    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);
    
    0 讨论(0)
  • 2020-11-22 06:07

    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);
    
    0 讨论(0)
  • 2020-11-22 06:11

    It looks like you can say

    Convert.ToInt64(value, 16)
    

    to get the decimal from hexdecimal.

    The other way around is:

    otherVar.ToString("X");
    
    0 讨论(0)
提交回复
热议问题