Получение типа / размера `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 /, с которой вы взаимодействуете.

  • Ptyon Ctypes, проходящий в указателе и возвращающий структуру
  • Python & Ctypes: передача структуры функции в качестве указателя для возврата данных
  • Python, как декодировать двоичную кодированную десятичную (BCD)
  • Как передать список / массив структур с python на C
  • Преобразование кода ctypes в cython
  • Самый быстрый способ упаковать список поплавков в байты в python
  • Класс для создания простых структурированных классов?
  • Как разбить 16-разрядное целое число без знака на массив байтов в python?
  • Python - лучший язык программирования в мире.