Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 14, 2012 14:06:43

Squash
Зарегистрирован: 2012-08-14
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Win32 ReadFile -> структура

Си:

typedef struct
{
    char szName [0x80];
    DWORD dwNums [];
}
SAMPLE_STRUCT;
 
DWORD writ;
char buff [0x200];
ReadFile (hFile, buff, sizeof(buff), &writ, NULL);
 
SAMPLE_STRUCT* pstr = (SAMPLE_STRUCT*)buff;
 
printf ("%s\n", buff);
for (unsigned i=0; pstr->dwNums[i]; i++)
    printf ("%i\n", pstr->dwNums[i]);

Как сделать то же самое на питоне?

Отредактировано Squash (Авг. 14, 2012 14:14:20)

Офлайн

#2 Авг. 14, 2012 15:58:49

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Win32 ReadFile -> структура

Офлайн

#3 Авг. 14, 2012 16:47:30

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Win32 ReadFile -> структура

Если очень хочется использовать ReadFile
http://sourceforge.net/projects/pywin32/
или ctypes
http://docs.python.org/library/ctypes

import ctypes
from ctypes.wintypes import DWORD
bytes_read = DWORD()
buffer = ctypes.create_string_buffer(200+1)
res = ctypes.windll.krenel32.ReadFile(handle, buffer, 200,ctypes.byref(bytes_readd),None)
check_res ...
check ctypes.windll.kernel32.GetLastError()

Ну или примерно так:
with open('myfile', 'rb') as bin_file:
    data = bin_file.read(200)
    my_name = struct.unpack_from("80s", data)
    arr = array.array("I")
    arr.fromstring(data[80:])
“Примерно” - потому как этот код не выводит содержимое стека, если числа != 0

Отредактировано EBFE (Авг. 14, 2012 16:48:03)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version