接收到的 UDP 字节混合了十六进制和 ascii;如何解码?
UDP bytes received with hex and ascii mixed; How to decode?
我 运行 在 real-time 模拟 (OPAL RT) 中连接一个 UDP 客户端,它基本上发送两个双精度值(1 和 1),我收到带有一些时间戳的值和header 信息(我猜)。总共24个字节,8个字节为header信息,8个字节为double数据。当我 运行 下面的代码在 Python 3 using UDP socket:
'''
import socket
UDP_IP = "10.10.114.22"
UDP_PORT = 25000
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
print("socket bound, waiting for data...")
while True:
raw = sock.recv(1024)
print(raw,len(raw),type(raw))
'''
我得到以下输出:
b'\x01\x00\xecV\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'
这是一个 24 字节的字符串。现在我可以看到一些 ascii 字符“?”与十六进制数据。我该如何解码?
我认为在每个数据字节的 64 位中,1 位是符号,11 个指数和 52 个尾数,但我无法理解 "xf0?" 即 "xf0 x3f" 实际上是双“1”。请帮忙。
我在 Wireshark
中得到以下数据
Data: 0100647802001000000000000000f03f000000000000f03f
请帮助我。
您可以使用 struct 模块:
>>> raw = b'\x01\x00\xecV\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'
>>> struct.unpack('d', raw[8:16])
(1.0,)
>>> struct.unpack('d', raw[16:24])
(1.0,)
使用struct转成数字:
import struct
s = b'\x01\x00\xecV\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'
ba = bytearray(s)
print(struct.unpack('<d', ba[-16:-8]))
print(struct.unpack('<d', ba[-8:]))
>>> (1.0,)
(1.0,)
我 运行 在 real-time 模拟 (OPAL RT) 中连接一个 UDP 客户端,它基本上发送两个双精度值(1 和 1),我收到带有一些时间戳的值和header 信息(我猜)。总共24个字节,8个字节为header信息,8个字节为double数据。当我 运行 下面的代码在 Python 3 using UDP socket:
'''
import socket
UDP_IP = "10.10.114.22"
UDP_PORT = 25000
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
print("socket bound, waiting for data...")
while True:
raw = sock.recv(1024)
print(raw,len(raw),type(raw))
''' 我得到以下输出:
b'\x01\x00\xecV\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'
这是一个 24 字节的字符串。现在我可以看到一些 ascii 字符“?”与十六进制数据。我该如何解码? 我认为在每个数据字节的 64 位中,1 位是符号,11 个指数和 52 个尾数,但我无法理解 "xf0?" 即 "xf0 x3f" 实际上是双“1”。请帮忙。 我在 Wireshark
中得到以下数据Data: 0100647802001000000000000000f03f000000000000f03f
请帮助我。
您可以使用 struct 模块:
>>> raw = b'\x01\x00\xecV\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'
>>> struct.unpack('d', raw[8:16])
(1.0,)
>>> struct.unpack('d', raw[16:24])
(1.0,)
使用struct转成数字:
import struct
s = b'\x01\x00\xecV\x02\x00\x10\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?'
ba = bytearray(s)
print(struct.unpack('<d', ba[-16:-8]))
print(struct.unpack('<d', ba[-8:]))
>>> (1.0,)
(1.0,)