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
到十六进制当量.
这些不起作用:
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)
使用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场景.