python使用C结构体

def SDF_GetDeviceInfo(self) -> dict:
        # 获取设备信息
        class DEVICEINFO(Structure):
            _fields_ = [('IssuerName', c_char*40),
                        ('DeviceName', c_char*16),
                        ('DeviceSerial', c_char*16),
                        ('DeviceVersion', c_int32),
                        ('StandardVersion', c_int32),
                        ('AsymAlgAbility', c_int32*2),
                        ('SymAlgAbility', c_int32),
                        ('HashAlgAbility', c_int32),
                        ('BufferSize', c_int32)]

        try:
            deviceInfoPointer = pointer(DEVICEINFO())
            code = self.SO.SDF_GetDeviceInfo(self.hSessionHandle, deviceInfoPointer)
            deviceInfo1 = deviceInfoPointer.contents
            reVal = dict()
            reVal['code'] = code
            reVal['IssuerName'] = deviceInfo1.IssuerName.decode()
            reVal['DeviceName'] = deviceInfo1.DeviceName.decode()
            reVal['DeviceSerial'] = deviceInfo1.DeviceSerial.decode()
            reVal['DeviceVersion'] = str(deviceInfo1.DeviceVersion)
            reVal['StandardVersion'] = str(deviceInfo1.StandardVersion)
            reVal['AsymAlgAbility'] = str(deviceInfo1.AsymAlgAbility[0]) + "|" + str(deviceInfo1.AsymAlgAbility[1])
            reVal['SymAlgAbility'] = str(deviceInfo1.SymAlgAbility)
            reVal['HashAlgAbility'] = str(deviceInfo1.HashAlgAbility)
            reVal['BufferSize'] = str(deviceInfo1.BufferSize)
            log.debug("retVal:" + str(reVal))
            return reVal
        except BaseException as e:
            log.critical('关闭会话失败: ' + traceback.format_exc(e))

 

posted @ 2023-08-29 13:32  梧桐潇雨  阅读(32)  评论(0编辑  收藏  举报