为什么字节数组在Go和C#中转换为bigint后给出不同的数字?

c#

我有一个字节数组,我将其转换为 big int 并输出到控制台。

在 C# 中:
https : //dotnetfiddle.net/eNz1Lg

在围棋中:
https : //play.golang.org/p/gXKoEja_8Dd

为什么结果我有不同的数字?

C#结果: 29063245685294006143166067625254036131869872254473278645853807481306566623231

去结果: 115792089237316195423570985008687907852837564279074904382605163141518161494336

回答

好吧,在C#Go 中BigInteger不同的表示。让我们提供同样易于操作的数组

    {0x01, 0x02}

看看发生了什么:

var array = []byte{
    0x01, 0x02, 
}

var seed = new(big.Int).SetBytes(array)
str := seed.String()

fmt.Println(str)

结果是258(注意,258 == 0x01 * 256 + 0x02

C#

var array = new byte[]
{
    0x01, 0x02,
};

var seed = new System.Numerics.BigInteger(array);

Console.WriteLine($"{seed}");

结果是513(注意,513 == 0x01 + 0x02 * 256

所以Go转换byte[]BigIntegerfrom last 到 first

       array[array.Length - 1] + 
       array[array.Length - 2] * 256 +  
       array[array.Length - 3] * 256 * 256 + 
       ...
       array[0] * Pow(256, array.Length - 1)

C#它从第一到最后

       array[0] + 
       array[1] * 256 + 
       array[2] * 256 * 256 +
       ...
       array[array.Length - 1] * Pow(256, array.Length - 1)


以上是为什么字节数组在Go和C#中转换为bigint后给出不同的数字?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>