整数如何映射到4个字节?如何在Python中将4个字节转换为整数

时间:2019-04-21 04:20:47

标签: python

我正在从Java客户端向Python服务器发送两个整数。

如何将整数映射为0-255之间的4个整数?

如何将这4个字节转换回整数?

Java:

Socket socket = ((host,port));
//converting intArray to byteArray

int[] intArray = {900, 1200};
ByteBuffer byteBuffer = byteBuffer.allocate(intArray.length*4);
IntBuffer intBuffer = byteBuffer.asIntBuffer();
intBuffer.put(intArray);
byte[] byteArray = byteBuffer.array();


//Sending byteArray via socket to python Server

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.write(byteArray);

Python:

#receiving byteArray from Java

imageDimension = clientsocket.recv(1024)
print(imageDimension)
list = list(imageDimension)
print(list)
output:
b'\x00\x00\x03\x84\x00\x00\x04\xb0'
[0, 0, 3, 132, 0, 0, 4, 176]

在这种情况下,整数900似乎以某种方式映射到[0,0,3,132]中。这里发生了什么?他们如何将900转换为4个字节?

如何在python中将[0,0,3,132][0,0,4,176]转换回900和1200?

1 个答案:

答案 0 :(得分:3)

在二进制中,3和132分别是0000001110000100。二进制数900为1110000100。通过串联3和132的二进制表示,您将得到900。

00000011
+       10000100
================
0000001110000100

您可以使用struct.unpack将字节转换为其他类型。

>>> import struct
>>> x = b'\x00\x00\x03\x84\x00\x00\x04\xb0'
>>> struct.unpack(">II", x)
(900, 1200)

">II" format string表示应将八字节bytes对象解释为两个四字节整数,并采用低位字节序。