将浮点的字节表示形式追加到python bytearray

将浮点的字节表示形式追加到python bytearray,python,udp,bytearray,ctypes,pack,Python,Udp,Bytearray,Ctypes,Pack,我使用python和ctypes来读取字节数组,并将其存储在python bytearray中。然后将该阵列作为UDP数据包传输 我想将时间附加到这个字节数组中,并且相信这样做的方法是: t = time.time() 它返回一个python浮点值。然后找到存储在内存中的位置,提取表示浮点的字节数组(4或8,我不确定),并将这些字节附加到现有的bytearray中 非常感谢您对bytearray制作的UDP数据包添加时间戳的任何建议 我的最小代码如下: class Host: def

我使用python和ctypes来读取字节数组,并将其存储在python bytearray中。然后将该阵列作为UDP数据包传输

我想将时间附加到这个字节数组中,并且相信这样做的方法是:

t = time.time()
它返回一个python浮点值。然后找到存储在内存中的位置,提取表示浮点的字节数组(4或8,我不确定),并将这些字节附加到现有的bytearray中

非常感谢您对bytearray制作的UDP数据包添加时间戳的任何建议

我的最小代码如下:

class Host:
    def __init__(self):
        self.data = (ctypes.c_ubyte * 4112)()
        self.data_p = ctypes.byref(self.data)
        self.byte_data = bytearray(4120)
        self.t = (ctypes.c_ubyte * 8)()
        self.t_p = ctypes.byref(self.t)
        self.t = time.time()
        self.Data_UDP_IP = "127.0.0.1"
        self.Data_UDP_PORT = 8992
        self.DataSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    def genBytearray(self)
        <function that fills self.data with actual data>
        data = ctypes.cast(self.data_p, ctypes.POINTER(ctypes.c_ubyte))
        self.t  = time.time()
        t_cast = ctypes.cast(self.t_p, ctypes.POINTER(ctypes.c_ubyte))
        self.byte_data[0:4112] = data[0:4112]
        self.byte_data[4112:4120] = t_cast[0:8]



import time
import ctypes
import socket

Host1 = Host()
genBytearray(Host1)
Host1.DataSock.sendto(self.byte_data, (self.Data_UDP_IP, self.Data_UDP_PORT))

我并没有把时间写到self.t\p所指的位置。有一段时间我一直在思考这个问题,我忍不住想有一个更简单的方法。我遇到过struct.pack,但当我尝试使用它时,python似乎崩溃了。

如果有人偶然发现:

t = (ctypes.c_double * 1)(time.time())
tnew = ctypes.cast(t, ctypes.POINTER((ctypes.c_uint8 * 8)))
tnew.contents[0:8]

提取time.time()返回的64位双精度的uint8表示形式。

,以防任何人无意中发现:

t = (ctypes.c_double * 1)(time.time())
tnew = ctypes.cast(t, ctypes.POINTER((ctypes.c_uint8 * 8)))
tnew.contents[0:8]
提取time.time()返回的64位双精度的uint8表示形式