我目前需要在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
长答:
>>> 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转换完全相同。
干杯!