Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 23, 2021 16:02:48

KULINAR847
Зарегистрирован: 2019-09-20
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ctypes

Добрый день! Формирую структуру с использованием ctypes. Но на выходе получется, что размер структуры не совпадает с такой же в c++. Вывод программы представленной ниже
out size = 992
all_size = 990
в с++ размер 990. Подскажите, что не так?

 import ctypes
from ctypes import wintypes
MAX_CLIENT_NAME = 80
MAX_CARD_LS_DATA = 800
MAX_HASH = 20
MAX_TRACK2 = 40
MAX_PAN_N = 19
class struct_out_reserved5(ctypes.Structure):
	_fields_ = [
		("size", wintypes.DWORD),
		("Reserved1", ctypes.c_void_p),
		("Hash", wintypes.BYTE * MAX_HASH),
		("CardData", wintypes.BYTE * (MAX_TRACK2)),
		("Balance", wintypes.DWORD),
		("Currency", wintypes.DWORD),
		("CardLCDataLen", wintypes.DWORD),
		("CardLCData", wintypes.BYTE * (MAX_CARD_LS_DATA)),
		("AuthCode", ctypes.c_char * (6+1) ),
		("ClientName", ctypes.c_char * MAX_CLIENT_NAME),
		("IsOwn", wintypes.BYTE),
		("LltID", wintypes.BYTE),
		("Flags", wintypes.BYTE),
		("RealPan", ctypes.c_char * (MAX_PAN_N +1))
	]
out = struct_out_reserved5()
print('out size = ' + str(ctypes.sizeof(out)))
all_size = 0
all_size = all_size + ctypes.sizeof(wintypes.DWORD) * 4
all_size = all_size + ctypes.sizeof(wintypes.BYTE) * 3
all_size = all_size + ctypes.sizeof(ctypes.c_void_p)
all_size = all_size + ctypes.sizeof(wintypes.BYTE * MAX_HASH)
all_size = all_size + ctypes.sizeof(wintypes.BYTE * (MAX_TRACK2))
all_size = all_size + ctypes.sizeof(wintypes.BYTE * (MAX_CARD_LS_DATA))
all_size = all_size + ctypes.sizeof(ctypes.c_char * (6+1))
all_size = all_size + ctypes.sizeof(ctypes.c_char * MAX_CLIENT_NAME)
all_size = all_size + ctypes.sizeof(ctypes.c_char * (MAX_PAN_N +1))
print('all_size = ' + str(all_size))

Отредактировано KULINAR847 (Июнь 23, 2021 16:03:25)

Офлайн

#2 Июнь 23, 2021 19:15:07

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите с ctypes

Скорее всего не совпадает способ выравнивания данных в питоне и и в C++. На выравнивание влияют опции компиляции и прагмы плюсах, флаг упаковки в питоне
https://stackoverflow.com/questions/14771150/python-ctypes-pragma-pack-for-byte-aligned-read



Офлайн

#3 Июнь 24, 2021 07:32:28

KULINAR847
Зарегистрирован: 2019-09-20
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ctypes

doza_and
Скорее всего не совпадает способ выравнивания данных в питоне и и в C++. На выравнивание влияют опции компиляции и прагмы плюсах, флаг упаковки в питонеhttps://stackoverflow.com/questions/14771150/python-ctypes-pragma-pack-for-byte-aligned-read
Спасибо! _pack_ = 1 помогло.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version