我正在尝试将十进制转换为十六进制作为字符串。我已经到处寻找解决方案,但我能找到的只是 Int 或 long 到 Hex。使用下面的代码时,我收到“格式说明符无效”错误。
Decimal decValue = 18446744073709551615
string hexValue = decValue.ToString("X");
我还研究了将十进制转换为字节数组,然后转换为十六进制,但我也没有做到这一点。
我正在尝试将十进制转换为十六进制作为字符串。我已经到处寻找解决方案,但我能找到的只是 Int 或 long 到 Hex。使用下面的代码时,我收到“格式说明符无效”错误。
Decimal decValue = 18446744073709551615
string hexValue = decValue.ToString("X");
我还研究了将十进制转换为字节数组,然后转换为十六进制,但我也没有做到这一点。
由于您使用的是 .NET 3.5,那么适用于 .NET 2.0+ 的IntX怎么样?
var intx = new Oyster.Math.IntX(decValue.ToString());
intx.ToString(16);
对于 .NET 4.0+ 使用System.Numerics
(记得包含System.Numerics.dll
)
Decimal decValue = 18446744073709551615;
var bigValue = new BigInteger(decValue);
bigValue.ToString("X");
当然,这会忽略任何非整数部分。
由于您使用的是 .NET 3.5,因此您必须手动完成。你可以用一个扩展方法把它包装得漂亮而整洁:
public static class DecimalHelper {
public static string ToHexString( this Decimal dec ) {
var sb = new StringBuilder();
while( dec > 1 ) {
var r = dec % 16;
dec /= 16;
sb.Insert( 0, ((int)r).ToString( "X" ) );
}
return sb.ToString();
}
}
然后像这样调用它:
Decimal dec = 18446744073709551615;
var hex = dec.ToHexString();