跳转至

Python 基础使用记录 [ctypes] -- 装修中

文章说明

主要说明一些 ctypes 的用法

基础类型定义

a = ctypes.c_uint16(0)
print(a)
print(a.value)
print(type(a))
print(type(a.value))
a.value = 70000
print(a.value)

这样定义的数据类型,不能够直接控制值,需要使用 .value ,但是这样可以控制数据类型。

这段的打印结果是

c_ushort(0)
0
<class 'ctypes.c_ushort'>
<class 'int'>
4464

如果使用函数调用,ctypes的直接传递后能够修改原值

a = ctypes.c_uint16(0)
print(a)
print(a.value)
print(type(a))
print(type(a.value))

def change_num(num):
    num.value += 1

change_num(a)
print(a.value)

打印结果是

c_ushort(0)
0
<class 'ctypes.c_ushort'>
<class 'int'>
1

如果定义类 C 数组

a = (ctypes.c_uint16*5)()
print(a)
print(a[0])
print(type(a))
print(type(a[0]))
b = ((ctypes.c_uint16*5)*2)() # 类似 C 的 uint16_t b[2][5]

使用 [] 后,就不需要使用 .value 了。

结构体定义

class Person(ctypes.Structure):
    _fields_ = [
        ("reserved", ctypes.c_uint16 * 50),
        ("age", ctypes.c_uint16),
        ("height", ctypes.c_float)
    ]

枚举定义

import enum

class SATE_TYPE(enum.IntEnum):
    RED = 1
    GREEN = 2
    BLUE = 3

未整理

ps = Person()
ps.age = 20
ps.height = 2
print(ps.age)
print(ps.height)
def change_person(person):
    person.age = person.age + 1
    person.height = person.height + 1
change_person(ps)
print(ps.age)
print(ps.height)

这个用法也可以直接改变值