我有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
有人有任何想法吗?
答案 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 顺序的字节值数组。