簡體   English   中英

您可以在python中壓縮字節並將其發送嗎?

[英]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.

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