簡體   English   中英

Python Socket:轉換字節對象

[英]Python Socket:Converting bytes object

我通過TCP套接字接收到數據,其值應為"12345678901" 我也嘗試通過int.from_bytes轉換為byteorder ='big''littel' struct.unpack 'littel'struct.unpack ...

但是它不能很好地工作。

我得到的實際值為b'\\xd2\\x04.\\x16\\xc5"'( << data == conn.recv(2048))

我應該使用哪種方式將其轉換為整數?

編輯:在服務器端(非常典型)

TCP_IP = '192.168.3.50'
TCP_PORT = 8000
BUFFER_SIZE = 2048  

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()
print('Connection address:', addr)

data_dummy = 0

while 1:

data = conn.recv(BUFFER_SIZE)
if not data: break
if data_dummy != data or data_dummy == 0:
    print("received data:", data)
    print("converted(big)", int.from_bytes(data, byteorder='big'))
    print("converted(little)", int.from_bytes(data, byteorder='little'))

在客戶端(來自PLC)

我將放置命令行。

NEXT>> 8
received data: b'\xd2\x04\x00\x00\x00\x00'
converted(big) 230914621702144
converted(little) 1234

如果只有1234,則可以使用。

NEXT>> 9
received data: b'\xd2\x04\x01\x00\x00\x00'
converted(big) 230914638479360
converted(little) 66770

它不起作用,在這種情況下為12340001。

NEXT>> 11
received data: b'\xd2\x044\x12\x00\x00'
converted(big) 230915495297024
converted(little) 305398994

它不起作用,結構本身很奇怪。

好了,最后一條評論澄清了所有問題。 您用3個字(每個2個字節)對該整數進行了編碼。 以前,我做了一些測試,試圖將值“解碼”為64位int因為123456789010x2DFDC1C35 )不適合32位,但是(顯然)沒有成功。

根據[Python]:格式字符 ,對於單詞,我們具有short對應關系(我選擇了unsigned版本: H ):

 >>> import sys >>> import struct >>> sys.version '3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)]' >>> >>> data = b'\\xd2\\x04.\\x16\\xc5"' >>> fmt = b"<HHH" >>> parts = struct.unpack(fmt, data[:6]) >>> parts (1234, 5678, 8901) >>> >>> # If you want to combine the 3 numbers into the original one: ... >>> parts[0] * 100000000 + parts[1] * 10000 + parts[2] 123456788901 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM