[英]Convert bytes to int and back java/python
我正在轉換一個任意的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實現相同的目標?
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
然后回來:
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
無論如何,如果使python代碼使用big-endian,則可以跳過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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.