给定一个潜在的巨大整数值(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#中转换十六进制和十进制之间的数字?
哦,很简单:
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;