Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java与Python中将字节转换为整数_Java_Python_Bytearray - Fatal编程技术网

在Java与Python中将字节转换为整数

在Java与Python中将字节转换为整数,java,python,bytearray,Java,Python,Bytearray,我有以下python代码: myBytes = m.digest() for one in myBytes: print(one, end=' ') print(end='\n') intlist = int.from_bytes(myBytes, 'little') print("intlist", intlist) 上面的代码打印以下结果 72 230 166 56 69 98 5 189 49 43 129 54 237 2 147

我有以下python代码:

    myBytes = m.digest()
    for one in myBytes:
        print(one, end=' ')
    print(end='\n')
    intlist = int.from_bytes(myBytes, 'little')
    print("intlist", intlist)
上面的代码打印以下结果

72 230 166 56 69 98 5 189 49 43 129 54 237 2 147 230

intlist 30648576602749739553611008975560776

现在我想用java实现完全相同的结果。这是我目前的代码:

byte[] myBytes = md.digest();
System.out.println(Arrays.toString(myBytes));
BigInteger intlist = new BigInteger(myBytes);
System.out.println("intlist=" + intlist);
我从中得到的结果如下:

[72、-26、-90、56、69、98、5、-67、49、43、-127、54、-19、2、-109, -26]

intlist=969020153122212276895334558263304164326

java中的结果与我想做的是错误的。我希望得到与python代码完全相同的值


有什么想法吗?

您已经在Python中指定了小尾端字节顺序:

intlist = int.from_bytes(myBytes, 'little')
但是Java
biginger(byte[]val)
构造函数以大端顺序接受输入。另外,
int.from_bytes
默认情况下假定输入表示无符号整数,而
biginger(byte[]val)
将其输入解释为两位补码的有符号整数

如果要在Java中复制Python结果,请颠倒数组的顺序,并使用sign/magnity
biginger(int signum,byte[]magnity)
构造函数将数组视为表示正数:

byte[] bytes = {72, -26, -90, 56, 69, 98, 5, -67, 49, 43, -127, 54, -19, 2, -109, -26};
for (int i = 0; i < bytes.length / 2; i++) {
    byte temp = bytes[i];
    bytes[i] = bytes[bytes.length - i - 1];
    bytes[bytes.length - i - 1] = temp;
}
System.out.println(new BigInteger(1, bytes));

你检查过字节顺序了吗?Java是默认的Big-Endian谢谢!这正是我所需要的
306485766027497339553611008967975560776