簡體   English   中英

如何使用 Python socket.send() 而不是 8 位發送一個 16 位字

[英]How can I send a 16 bit word useing Python socket.send() instead of a 8bit one

我試圖在我的 PC 和傳感器設備之間建立 SPI 通信。 為此,我使用 TCP/IP 到 SPI 轉換器。 該項目的這一方面已經在運作。 我可以通過 TCP/IP 向轉換器發送一些東西,它就完成了它的工作。

那么問題出在哪里呢? 我使用套接字庫。 在Python 3.8做TCP/IP端:

import socket, sys

TCP_IP = '192.168.100.100'
TCP_PORT = 1003
BUFFER_SIZE = 1024

s = socket.socket()

try:
    s.connect((TCP_IP, TCP_PORT))

except socket.error as mag:
    print (" Socket Erroer: " + str(mag))

s.send(b'\x8000')
data = s.recv(BUFFER_SIZE)
print(data)

我想要做的是發送(二進制1000 0000 0000 0000 (= 8000 十六進制)。 但是 python 將 \x8000 拆分為 \x80\x00 並將其作為兩個 8 位字作為 1000 0000 發送,然后發送第二個 package 0000 0000。但是轉換器需要它作為 16 位字,否則它會填滿。 SPI 信號是0000 0000 1000 0000 0000 0000 0000 0000,太糟糕了,沒有前 8 位我無法讀取單個寄存器。

那么有沒有辦法將 /x8000 作為一個 16 位字發送? 我還想了解更多關於數據類型(或任何數據類型)的信息 b' something '那是什么? 它有什么作用?

謝謝您閱讀此篇。 我對所有建議和批評持開放態度。 我希望你能幫助我感謝你的每一次嘗試!

您可以使用 Python 原始套接字在單個數據包中包含 16 位並發送。

b'something'是 python 符號,它將字符串“something”轉換為二進制形式(字節),默認情況下為utf-8
例如,如果您編寫a=b'Hello' ,則a將具有\x48\x65\x6C\x6C\x6F

暫無
暫無

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

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