[英]Can you compress bytes in python and send them?
我正在編寫一個TCP python腳本,我需要前4個字節作為文件的大小。
我通過做得到文件的大小
SIZE_OF_FILE = os.path.getsize(infile.name)
大小為392399字節。
當我做
s.send(str(SIZE_OF_FILE).encode("utf-8"))
它發送文件,然后在我的服務器上
fileSize = conn.recv(4).decode('utf-8')
這應該讀取前4個字節,並提取文件大小信息,但它返回3923而不是392399。
作為文件大小...發生了什么事? “ 392399”應該能夠容納4個字節。
我們假設正在使用大端。
這是因為str(SIZE_OF_FILE)
使用十進制表示法鍵入數字-即,您將獲得字符串"392399"
,該字符串為6個字符(在UTF-8中為6個字節)。 如果僅發送前4個,則發送"3923"
。
您可能想要做的是使用struct.pack
類的struct.pack
來創建一個包含數字二進制表示形式的字節struct.pack
。
s.send(struct.pack(format_string, SIZE_OF_FILE))
您將以字符串( "392399"
)的形式發送大小,它是6個ASCII字符,因此是6個字節。 您想將其作為原始整數發送; 使用struct.pack
來做到這一點:
s.send(struct.pack(">i", SIZE_OF_FILE))
接收:
fileSize = struct.unpack(">i", conn.recv(4))[0]
>
使它成為大端。 要使其為小端,請使用<
代替。 i
是類型; 在這種情況下,為4字節整數。 鏈接的文檔中列出了類型,以防您想使用其他類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.