如何将一个巨大的整数(字符串格式)转换为十六进制格式?(C#)

evi*_*ack 17 c# hex types type-conversion

给定一个潜在的巨大整数值(采用C#字符串格式),我希望能够生成其十六进制等效值.普通方法在这里不适用,因为我们正在谈论任意大数,50位或更多.我见过的技术使用了这样的技术:

// 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);
Run Code Online (Sandbox Code Playgroud)

将无法工作,因为要转换的整数太大.

例如,我需要能够像这样转换字符串:

843370923007003347112437570992242323

到十六进制当量.

这些不起作用:

C#将整数转换为十六进制再返回 如何在C#中转换十六进制和十进制之间的数字?

Dan*_*röm 23

哦,这很简单:

        var s = "843370923007003347112437570992242323";
        var result = new List<byte>();
        result.Add( 0 );
        foreach ( char c in s )
        {
            int val = (int)( c - '0' );
            for ( int i = 0 ; i < result.Count ; i++ )
            {
                int digit = result[i] * 10 + val;
                result[i] = (byte)( digit & 0x0F );
                val = digit >> 4;
            }
            if ( val != 0 )
                result.Add( (byte)val );
        }

        var hex = "";
        foreach ( byte b in result )
            hex = "0123456789ABCDEF"[ b ] + hex;
Run Code Online (Sandbox Code Playgroud)

  • 美丽的解决方 (3认同)

Dav*_*man 7

使用BigInteger存储整数,然后在该对象上使用.ToString("X").

例:

var number = BigInteger.Parse("843370923007003347112437570992242323");
string hexValue = number.ToString("X");
Run Code Online (Sandbox Code Playgroud)

但是,这仅限于.NET 4及更高版本.但是Jens A. 在codeproject上指向了一个BigInteger类,该类包含一个名为ToHexStringso 的方法,适用于<.NET 4场景.

  • NET 3.5有一个很好的BigInteger实现,在这里有更低的实现:http://www.codeproject.com/KB/cs/biginteger.aspx (6认同)