Python:如何将十六进制字符转换为CType数据类型(例如uint32_t、uint16_t等)?

2024-05-23 14:59:09 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道把一个十六进制字符转换成特定的ctype变量的方法吗?在

为了详细说明,我需要创建一个函数,该函数接受十六进制字符列表和表示数据类型的字符串,并根据指定的数据类型生成一个值。在

我正在分析MAVlink字段,这些字段的值采用以下数据类型:uint64\u、uint32\u t、int32\u t、uint16\u t、uint8\u t、int8\u t、float、char

此外,字段的值可以是上述类型的数组。在

这就是我现在的功能:

    def getValue(payload, ftype):
        #  Check if signed or unsigned
        if ftype.find("uint") != -1: signed = False
        #  Check size of data type
        if   ftype.find('int8_t') != -1: stride = 1
        elif ftype.find('int16_t') != -1: stride = 2
        elif ftype.find('int32_t') != -1: stride = 4
        elif ftype.find('float') != -1: stride  = 4
        else: stride = 1 (Assume characters)
        chars = []
        while(stride > 0):
            #  Pop two characters to get one byte
            chars.append(payload.pop(0))
            chars.append(payload.pop(0))
            stride -= 1
        #  Convert selected characters to value of specified data type
        return convertToValueAsString(chars, ftype) #  I don't know how to do this

我看了一下ctypes和ctypes.uint*_t、 值(a)。但是,当数据类型是字符串而不是已知值时,我不确定如何使用此函数。在


Tags: to函数字符串iffind字符int8payload
1条回答
网友
1楼 · 发布于 2024-05-23 14:59:09

使用^{}模块。在

import struct
payload = b'\x00\x7d\x00\x00\x01\x00\x00\x00'
format_ = 'Hxxb'
bytelen = struct.calcsize(format_)  # Value is: 5
print(struct.unpack(format_, payload[:bytelen]))  # (32000, 1)
print(struct.pack(format_, 32000, 1))  # b'\x00}\x00\x00\x01'

相关问题 更多 >