繁体   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