以十六进制和ASCII混合形式接收的UDP字节;如何解码?

问题描述 投票:1回答:2

我正在实时仿真(OPAL RT)中运行UDP客户端,它基本上是发送两个double(1和1),并且我接收带有一些时间戳和标头信息的值(我猜是)。总共24个字节,标头信息为8个字节,双精度数据为8个字节。当我使用UDP套接字在Python 3中运行以下代码时:

'''

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

请帮助我。

python sockets udp ascii decode
2个回答
2
投票
>>> 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,)

0
投票
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,)
© www.soinside.com 2019 - 2024. All rights reserved.