Получение типа / размера `time_t` с использованием ctypes

Я обращаюсь к C-структуре, которая содержит некоторые поля time_t используя модуль python ctypes .

Учитывая его совершенно несовместимую природу, я не могу определить эти поля статически как c_int или c_long .

Как я могу определить их, чтобы сделать мой код переносимым?

Пример определения структуры C:

 #import <sys/types.h> #import <time.h> typedef struct my_struct { time_t timestap; uint16_t code; }; 

Соответствующая структура типов python:

 from ctypes import * c_time = ? # What do I have to put here? class MyStruct(Structure): _fields_ = [ ('timestamp', c_time), ('code', c_int16), ] 

One Solution collect form web for “Получение типа / размера `time_t` с использованием ctypes”

Ваш лучший выбор – это интроспекция системы, в которой работает ваш скрипт, и лучший выбор того, какой интегральный тип использовать. Что-то вроде,

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

Суть в том, что time_t не определен в стандарте. Это зависит от ОС и компилятора. Таким образом, ваше определение time_t в вашем скрипте Python зависит от DLL /, с которой вы взаимодействуете.

  • Выравнивание типа расширения Python, определенного как C-структура с элементами PyObject *
  • Python: как упаковать различные типы данных в строковый буфер, используя struct.pack_into
  • Доступ к битовым полям при чтении / записи двоичных структур данных
  • Как элегантно отправлять / получать большую C-структуру с помощью Python?
  • Python & Ctypes: передача структуры функции в качестве указателя для возврата данных
  • Python, как декодировать двоичную кодированную десятичную (BCD)
  • Python, как редактировать данные в namedtuple, хранящиеся в списке?
  • Преобразование кода ctypes в cython
  • Python - лучший язык программирования в мире.