在 .NET 3.5 中将十进制类型转换为十六进制(字符串)

本文关键字:十六进制 字符串 类型转换 十进制 NET | 更新日期: 2023-09-27 18:32:40

我正在尝试将十进制转换为十六进制作为字符串。我已经四处寻找解决方案,但我能找到的只是 Int 或 long to Hex。使用下面的代码时,我收到"格式说明符无效"错误。

    Decimal decValue = 18446744073709551615
    string hexValue = decValue.ToString("X");

我还考虑将小数转换为字节数组,然后转换为十六进制,但我也缺乏这一点。

在 .NET 3.5 中将十进制类型转换为十六进制(字符串)

既然你使用的是.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();