JavaクライアントからPythonサーバーに2つの整数を送信しています。
整数はどのようにして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で900と1200に変換[0,0,3,132]
して[0,0,4,176]
戻すにはどうすればよいですか?
バイナリでは、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"
フォーマット文字列は8バイトのことを示しているbytes
オブジェクトは、リトルエンディアンのバイト順序で2つの4バイトの整数として解釈されるべきです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加