将十六进制字符串转换为其BigInteger等效值会使该值无效

Bab*_*imi 5 c# biginteger

我有一个字符串,表示我想要转换为整数的大十六进制数.当我尝试转换时,等价整数的答案是否定的.这是代码:

string hex = "9782E78F1636";

BigInteger b1 = BigInteger.Parse(hex, NumberStyles.AllowHexSpecifier);
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到正确的结果?

Nat*_*per 8

您需要在字符串前加0.虽然这个数字可以使用long.Parse,但是如果第一个数字在8-F之间,则BigInt会得到一个负数

string hex = "09782E78F1636";
      BigInteger b1 = BigInteger.Parse(hex,NumberStyles.AllowHexSpecifier);
    Console.WriteLine(b1);
Run Code Online (Sandbox Code Playgroud)

这已经很久了,但我觉得我应该解释原因:

有符号整数使用最高有效位(MSB)指示值是正还是负.虽然它不仅仅是msb.

双方BigIntegerlong签署整数:如果在十六进制字符串最显著数介于0( 0000)和7( 0111)中,MSB 0和数量是积极的.如果它是8(1000)或更高,则msb为1,且数字为负数.

long.Parse知道你要解析的类型的大小,即它是十六进制表示00009782E78F1636.msb是0如此明确的正面.

BigInt不像长的固定大小.如果你给它9782E78F1636 它不知道你的意思是相同的00001782E78F1636.它认为类型只是更短.它期待一个有符号的值,它认为你的意思是9(1001)的第一位作为符号.添加一个零到前09782E78F1636明确指出的MSL位01001仅仅是实际价值的一部分.