python - 使用 ctypes 获取 `time_t` 的类型/大小

标签 python c struct ctypes

我正在使用 python 访问一个包含一些 time_t 字段的 C 结构 ctypes模块。

鉴于其不完全可移植的特性,我无法将这些字段静态定义为 c_intc_long 类型。

如何定义它们以使我的代码可移植?

示例 C 结构定义:

#import <sys/types.h>
#import <time.h>

typedef struct my_struct {
    time_t timestap;
    uint16_t code;      
};

各自的python ctypes结构:

from ctypes import *

c_time = ? # What do I have to put here?

class MyStruct(Structure):
    _fields_ = [
        ('timestamp', c_time),
        ('code', c_int16),
    ]

最佳答案

最好的办法是反省脚本运行的系统,并确定要使用的整数类型。类似的东西,

if sys.platform == 'win32':
    time_t = ctypes.c_uint64
# ...

底线是 time_t 没有在标准中定义。这取决于操作系统和编译器。因此,您在 Python 脚本中对 time_t 的定义取决于 DLL/因此您正在与之交互。

关于python - 使用 ctypes 获取 `time_t` 的类型/大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418221/

相关文章:

Python:安装在远程服务器上时无法使导入工作

python - suds 脚本失败,出现异常异常 : imported schema failed, 找不到记录器 "suds.xsd.sxbasic"的处理程序

c - ARM GCC 生成的函数序言

c - 将 printf 移动到不同的行会产生不同的输出? (C)

c# - 如何解决这个 :Struct In Collection not changed

python - 科学python中的最佳多个返回值

python - 如何过滤数据框并更新特定单元格的选择性行

c - 如果我可以通过 C 中的指针修改它,那么 const 限定符的目的是什么?

C 堆分配硬编码结构数组

c++ - 使用 std::vector<unsigned char> 的内容初始化结构体