首页 > 解决方案 > 如何使用 Python socket.send() 而不是 8 位发送 16 位字

问题描述

我试图在我的 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 发送,然后是第二个包 0000 0000。但是转换器需要它作为 16 位字,否则它会将其填满。SPI 信号是0000 0000 1000 0000 0000 0000 0000 0000,这太糟糕了,没有前 8 位我无法读取单个寄存器。

那么有没有办法将 /x8000 作为一个 16 位字发送?我还想了解更多关于数据类型(或其他类型)的信息 b' something '那是什么?它有什么作用?

谢谢您阅读此篇!我对所有的建议和批评持开放态度。我希望你能帮助我谢谢你的每一次尝试!

标签: pythonsocketsbinaryhexspi

解决方案


您可以使用 Python原始套接字在单个数据包中包含 16 位并发送。

b'something'是 python 表示法,将字符串 "something" 转换为其二进制形式(字节),默认情况下使用utf-8.
例如,如果你编码a=b'Hello'a就会有\x48\x65\x6C\x6C\x6F.


推荐阅读