将字节转换为int并返回java/python

将字节转换为int并返回java/python,java,python,int,byte,Java,Python,Int,Byte,我正在转换一个任意ascii字符串,这是一个用零填充的数字,例如“1”作为“0000000001”,然后转换为字节,然后返回python。当然,值也可以是“0000004231”等。它始终是数字,并且在由零填充的有符号32位值的范围内 当我告诉python它是字节,并且我希望它是int时,它会将它转换成一个非常大的随机数。然后我可以稍后使用to_bytes()函数将其转换回原始值 In [74]: value = int.from_bytes(bytes(format(1, '010d'),'a

我正在转换一个任意ascii字符串,这是一个用零填充的数字,例如“1”作为“0000000001”,然后转换为字节,然后返回python。当然,值也可以是“0000004231”等。它始终是数字,并且在由零填充的有符号32位值的范围内

当我告诉python它是字节,并且我希望它是int时,它会将它转换成一个非常大的随机数。然后我可以稍后使用
to_bytes()
函数将其转换回原始值

In [74]: value = int.from_bytes(bytes(format(1, '010d'),'ascii'), byteorder='little')                                                                                                                                                                                          

In [75]: value.to_bytes(10,byteorder=sys.byteorder)                                                                                                                                                                                                                            
Out[75]: b'0000000001'

In [76]: value                                                                                                                                                                                                                                                                 
Out[76]: 232284873704446901628976

In [77]: 

如何使用java实现同样的效果?

我不擅长Python,但可能是这样的:

String test = "0000000001";
byte[] testBytes = test.getBytes(); // If needed pass an encoding as argument
String newTest = new String(testBytes); // Again, if needed, pass an encoding as argument
Java中代码的精确(?)功能副本:

String string = String.format("%010d", 1); // I hope this format is correct

byte[] bigEndian    = string.getBytes(StandardCharsets.US_ASCII);
System.out.println(Arrays.toString(bigEndian)); // [48, 48, 48, 48, 48, 48, 48, 48, 48, 49]

byte[] littleEndian = new byte[bigEndian.length];
for (int i = 0; i < bigEndian.length; i++)
    littleEndian[littleEndian.length - i - 1] = bigEndian[i];

BigInteger value = new BigInteger(littleEndian);
System.out.println(value); // 232284873704446901628976
String String=String.format(“%010d”,1);//我希望这个格式是正确的
byte[]bigEndian=string.getBytes(StandardCharsets.US_ASCII);
System.out.println(Arrays.toString(bigEndian));//[48, 48, 48, 48, 48, 48, 48, 48, 48, 49]
byte[]littleEndian=新字节[bigEndian.length];
for(int i=0;i
返回:

BigInteger value = new BigInteger("232284873704446901628976");

byte[] littleEndian = value.toByteArray();

byte[] bigEndian = new byte[littleEndian.length];
for (int i = 0; i < littleEndian.length; i++)
    bigEndian[bigEndian.length - i - 1] = littleEndian[i];

System.out.println(Arrays.toString(bigEndian)); // [48, 48, 48, 48, 48, 48, 48, 48, 48, 49]

String string = new String(bigEndian, StandardCharsets.US_ASCII);
System.out.println(string); // 0000000001

int number = Integer.parseInt(string);
System.out.println(number); // 1
BigInteger值=新的BigInteger(“232284873704446901628976”);
字节[]littleEndian=value.toByteArray();
byte[]bigEndian=新字节[littleEndian.length];
for(int i=0;i

在任何情况下,如果让python代码使用big-endian,则可以跳过Java中的数组反转。

能否指定第一行(contents=“ascii”?)和第二行(其中内容主要是ascii“0”)中的
value
之间的区别?你能说明这个数字的相关性吗?该数字仅为前八个ASCII“0”的十进制表示形式,并丢弃后面的两个。我需要用0和10个字符填充该数字。它是一个32位带符号整数范围内的数字,填充到固定的10个字符长度,“漂亮的大随机数”触发我的警报。在您看来,它可能是随机的,但在十六进制(计算机)中,它看起来像0x3030300。(0x30是“数字零”的ASCII)您是否看到0000000001与00000000099的数字相同?这个号码的用途是什么?这听起来像是一个典型的例子。你所说的0000000001和00000000099是什么意思。1=>232284873704446901628976和99=>270229826264067449303088不一样?其目的是使一个固定长度的数字成为另一个固定长度的较长数字,这是您乍一看无法识别的。但别担心…啊,我的错误。计算器支持大整数,但显然将十六进制限制为64位。要获得任何字符串的“随机数”,只需使用
string.hashCode()
。我已经试过了。我得到
[B@7852e922
testBytes
变量中,而不是
232284873704446901628976
我所期望的?这似乎完全一样。谢谢