如何使用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)

我想做的是发送(以 binary (二进制)格式) 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'什么是'那是什么?是什么?

感谢您阅读本文!我愿意接受所有建议和批评。希望您能帮助我,谢谢您的一切尝试!

解决方法

您可以使用Python raw socket在单个数据包中包含16位并发送。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...