python - 通过参数传递给脚本通过 UDP 或 TCP 套接字发送十六进制值

标签 python sockets hex parameter-passing

我知道为了使用 python 通过 UDP 套接字发送数据必须采用以下格式 "\x41"= A 。

我有一个 python 脚本 udp_send.py,我想发送一个十六进制值来表示服务器端的寄存器值。

我通过 linux 终端运行我的脚本 >>python udp_send.py "\x41"。我在我的 python 脚本中使用 argv[1] 读取了变量。我做了一个 len 检查,它是 3 。它忽略\并将 x、4 和 1 分别作为 1 个字节,而我希望\x41 仅代表 1 个字节。

然后我尝试连接 data="\x"+"41"但它没有用。

"\x"被 python 解释为转义。我正在尝试找到一种方法将十六进制值传递到我的脚本中并通过 UDP 套接字发送它?

到目前为止,我已经取得了以下成就。通过 UDP 套接字发送在 python 脚本中定义的十六进制值。

from socket import *
from sys import *

## Set the socket parameters
host = <ip-define-here>
port = <port-define-here>
buf = 1024
addr = (host,port)

## Create socket
UDPSock = socket(AF_INET,SOCK_DGRAM)

## Send messages
data ='\x41'
#data=argv[1] #commented out
if not data:
    print "No data"
else:
    if(UDPSock.sendto(data,addr)):
        print "Sending message ",data

## Close socket
UDPSock.close()

我在服务器端使用 wireshark 并看到十六进制值 41 出现。

只是要清楚“41”(由 2 个字节组成)与 python 中的“\x41”(仅一个字节)不同。

我的简单问题是,如何将字符“41”与“\x”连接起来形成“\x41”,这样我就可以将它分配给 python 脚本中的数据变量,这样我就可以将它作为十六进制发送值 41。

最佳答案

在您的代码中,您可以将您的 arg 转换为正确的格式,然后您可以使用 python udp_send.py 0x41 调用它

arg = sys.argv[1]

# intarg = 65 == 0x41
intarg = int(arg, 16)

# now convert to byte string '\x41'
hexstring = struct.pack('B', intarg)

关于python - 通过参数传递给脚本通过 UDP 或 TCP 套接字发送十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113530/

相关文章:

python - 使用 python 在函数应用程序中绑定(bind)来自 Azure blob 的输入

python - 更新字典而不添加新键?

C# tcp 套接字如何判断正在发送的对象类型?

c++ - 无法正确将十六进制转换为十进制

c++ - 从外部文件中读取字符串行并转换为十六进制

python - Docker与旧方法(主管,Git,您的项目)

python - 如何使用 Sphinx 链接到 str 方法?

node.js - 通过 node.js 和套接字访问 mqtt 代理

C套接字,recv丢失数据

java - 十六进制数是负数吗?