BigInteger.ToString("x")无法正确打印负十六进制数字

goo*_*ate 3 .net c# tostring biginteger

我需要将BigInteger打印为负数,但ToString("X")的Hex重载不正确.

        BigInteger be1 = new BigInteger();
        be1 = 0x7e;
        Console.WriteLine(be1.ToString());     // 126
        Console.WriteLine(be1.ToString("X"));  // 7E
        Console.WriteLine(be1.ToString("x"));  // 7e
        Console.WriteLine();
        be1 = BigInteger.Negate(be1);  
        Console.WriteLine(be1.ToString());     // -126  OK
        Console.WriteLine(be1.ToString("X"));  // 82  WRONG
        Console.WriteLine(be1.ToString("x"));  // 82 WRONG
Run Code Online (Sandbox Code Playgroud)

我做错了什么,我该如何解决这个问题?

(为什么我这样做是值得的,所以我可以在这里匹配十六进制输出,用C++数组说明)

Dan*_*ker 6

ToString打印十六进制整数,就好像它是无符号的一样.要使用符号打印十六进制,请取消该值并在其前面加上符号.

BigInteger v = new BigInteger(-10);
string str = "-" + (-v).ToString("X");  // "-0A"
Run Code Online (Sandbox Code Playgroud)

作为一种扩展方法,它可以像这样工作:

class Program
{
    static void Main(string[] args)
    {
        BigInteger v = new BigInteger(-10);
        Console.WriteLine(v.ToSignedHexString());   // Prints: "-0A"
        Console.ReadLine();
    }
}

public static class BigIntegerExtensions
{
    public static string ToSignedHexString(this BigInteger value)
    {
        if (value.Sign == -1)
            return "-" + (-value).ToString("X");
        else
            return value.ToString("X");
    }
}
Run Code Online (Sandbox Code Playgroud)