BigInteger in Python?



我目前需要在python中编写接收器程序,我想知道我做错了什么。在java中,我有(代码片段明显):

byte[] fileSize = new byte[2];
BigInteger bi = new BigInteger(fileSize);
System.out.println("FileSize in Bytes: " + bi);

返回值:FileSize in Bytes: 27762

如果我打印出数组字节fileSize,我得到以下值:

for(int u = 0; u < fileSize.length; u++){
System.out.println(fileSize[u]);

}

返回:108 and the value 114.

我在python端接收这两个值(它通过数据报发送给python接收器)。我如何将它们组合起来或将它们转换为Java中BigInteger返回的值27762 ?我有点迷失了。

任何想法都会很棒!

提前感谢!

TL;
>>> int.from_bytes([108, 114], 'big') # easy way
27762
>>> (108 << 8) + 114 # what you are doing under the hood
27762

长答:

你在Python中寻找的操作称为按位操作。

本质上你想把两个值打包成二进制。

108在二进制中是1101100114的二进制是1110010

要在Python中将它们打包回bigInt中,您必须移动108以便为114腾出空间。向左移动8位

108在二进制中,移位8位是110110000000000。现在我们把它们放在一起:

110110000000000
+        1110010
----------------
110110001110010

将110110001110010转换回十进制,得到27762

所以本质上你想要的操作是:

>>> (108 << 8) + 114
27762

你必须自己弄清楚边缘情况的细节,比如你的数字需要更多的字节移位而不仅仅是一个字节(也就是代码108 <<8)

我能够修复它,只是以防有人遇到同样的问题:

在Python中:

test = []
test.append(108)
test.append(114)

print(int.from_bytes(test, 'big'))

返回27762的值,与Java中的BigInteger转换完全相同。

干杯!

最新更新