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++数组说明)
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)
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |