小编典典

如何将gi模整数(字符串格式)转换为十六进制格式?(C#)

c#

给定一个潜在的巨大整数值(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);

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

例如,我需要能够转换如下字符串:

843370923007003347112437570992242323

到它的十六进制等值

这些不起作用:

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


阅读 326

收藏
2020-05-19

共1个答案

小编典典

哦,很简单:

        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;
2020-05-19