为什么C#和Java BigInteger转换字节[]的方式不同?

为什么C#和Java BigInteger转换字节[]的方式不同?,java,c#,biginteger,Java,C#,Biginteger,这是Java代码: new BigInteger("abc".getBytes()).toString(); 结果是6382179 我希望在C#中得到相同的结果,但当我使用以下代码时: (new System.Numerics.BigInteger(System.Text.Encoding.ASCII.GetBytes("abc"))).ToString(); 我得到了6513249 如何以与Java相同的方式转换C#中的字符串?C#将字节数组视为小端

这是Java代码:

new BigInteger("abc".getBytes()).toString();
结果是6382179

我希望在C#中得到相同的结果,但当我使用以下代码时:

(new System.Numerics.BigInteger(System.Text.Encoding.ASCII.GetBytes("abc"))).ToString();
我得到了6513249

如何以与Java相同的方式转换C#中的字符串?

C#将字节数组视为小端字节:

参数

字节[]

按小尾数顺序排列的字节值数组

而Java将字节数组视为big-endian:

将包含BigInteger的二元补码二进制表示形式的字节数组转换为BigInteger。假设输入数组按大端字节顺序排列:最高有效字节位于第0个元素中

因此,您需要获得与其他语言相同的结果

还要注意,Java的
String.getBytes
使用默认编码,可能不是ASCII。你应该使用

StandardCharsets.US_ASCII.encode("abc").array()
// or
"abc".getBytes(StandardCharsets.US_ASCII)

为了获得与C#代码相同的字节集。

我重新打开了这个问题,因为我认为问题是关于一对完全不同的API,恰好也有小/大端问题。它只是相关的,但不是重复的。