我正在从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?
答案 0 :(得分:3)
在二进制中,3和132分别是00000011
和10000100
。二进制数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
对象解释为两个四字节整数,并采用低位字节序。