Python函数是以下的,python中可以指定字节的排列顺序,比如 'little',java中默认是大字节序,通过使用ArrayUtils来反转字节数组来达到使用小字节序的目的,字节数组转long的过程中会转化成有符号的long类型,解决办法是使用BigInteger类来实现unsigned,具体代码如下:
要用java方式实现的python的代码
import hashlib
md5 = hashlib.md5("this is str".encode("utf-8"))
low = int.from_bytes(md5.digest()[0:8],'little')
java代码实现
//导入需要的包
import java.util.Arrays;
import org.apache.commons.lang.ArrayUtils;
import java.math.BigInteger;
public static String byteArrayToLong(byte[] array) {
byte[] lowArray = Arrays.copyOfRange(array,0,8);
byte[] highArray = Arrays.copyOfRange(array,8,16); //分别拷贝字节数组的前八位和后八位
ArrayUtils.reverse(lowArray);//java中默认的字节排列顺序为big_endian,用工具类将字节数组翻转改成little_endian
ArrayUtils.reverse(highArray);
BigInteger lowBigInt =new BigInteger(1,lowArray);
BigInteger highBigInt =new BigInteger(1,highArray);
return lowBigInt.toString();//返回的就是无符号的long类型的字符串
}
网友评论