Что нового

Читаем бинарные данные в структуру.

Heler

Знающий
Сообщения
70
Репутация
11
Всем привет! В примере считываю бинарные данные в структуру. На выходе получаю только часть ожидаемых данных. Подскажите пожалуйста в чем ошибка. Файл для теста в атаче.
Код:
#Include <WinAPIEx.au3>

Global $sFile = 'S:\binfile.dat' , $iBytes
$hCompresDataStruct = DllStructCreate("char[37]")
$pCompresData = DllStructGetPtr($hCompresDataStruct)
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
_WinAPI_SetFilePointer($hFile, 28)
_WinAPI_ReadFile($hFile, $pCompresData, DllStructGetSize($hCompresDataStruct), $iBytes)
_WinAPI_CloseHandle($hFile)
MsgBox(0,"",DllStructGetData($hCompresDataStruct, 1))
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Во-первых, старайся придерживаться общих правил объявления переменных: $t... - структура; $p... - указатель; $h... - хендл и т.д.

Во-вторых, здесь все работает абсолютно правильно, после считывание из файла, структура содержит все 37 байт, как и было объявлено. Хитрость заключается в том, что у тебя структура определена как "char", и MsgBox() честно пытается вывести строку из 37 символов, но 7-ой символ в этой строке есть символ с кодом 0, т.е. конец строки. Собственно на этом все и останавливается. Просто определи структуру как "byte" и все будет OK.

Код:
#Include <WinAPI.au3>

Global $sFile = "S:\binfile.dat", $iBytes

$tCompresData = DllStructCreate('byte[37]')
$pCompresData = DllStructGetPtr($tCompresData)
$hFile = _WinAPI_CreateFile($sFile, 2, 2)
_WinAPI_SetFilePointer($hFile, 28)
_WinAPI_ReadFile($hFile, $pCompresData, 37, $iBytes)
_WinAPI_CloseHandle($hFile)

MsgBox(0, "", DllStructGetData($tCompresData, 1))
 
Автор
H

Heler

Знающий
Сообщения
70
Репутация
11
Yashied, спасибо большое. Все работает. ;)
 
Верх