相同的字节数组=> Java和C#中的BigInteger值不同

时间:2014-12-31 15:50:11

标签: java c#

我有Java和C#代码如下:

byte[] byteArray = {
          52, 51, 102, 100, 55, 48, 48, 48, 57, 97, 57, 55, 97, 55, 100, 51, 49, 49, 99, 53, 54, 52, 52,
          48, 52, 55, 99, 99, 99, 55, 48, 48, 102, 56, 100, 48, 56, 97, 57, 100
      };
BigInteger byteArrayAsBigInt = new BigInteger(byteArray);

正如您所看到的,两个阵列都是相同的。但是为什么Java中的BigInteger构造函数返回的值不同于C#中的值?

byteArrayAsBigInt的Java值:

435547623972009042387221878687981899647773248766318257271173050301525056529400623692496442046820

byteArrayAsBigInt的C#值:

836240090191738952707023426454050812020217962491637996803829702297801636146665723913243623568180

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

答案是在Java Big Endian中假定订单,但在C#中使用Little Endian。

来自Java文档:

  

public BigInteger(byte [] val)转换包含的字节数组   二进制补码将BigInteger表示为一个   BigInteger的。假设输入数组采用 big-endian 字节顺序:   最重要的字节在第0个元素中。

来自C#文档:

  

BigInteger构造函数(Byte [])   类型:System.Byte []    little-endian 顺序的字节值数组。

相关问题