Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > преобразование битов в файл


Автор: ZC1989 6.12.2006, 21:40
Подскажите как биты файла уже загруженные в память преобразовать в объект обычного файла или ещё во что, но что бы можно было с ними работать через обычные функции чтения на подобии std::fstream read(…); или подобных же АПИшных… файл текстовый

Получаю я этот набор битов читая файл из зип-архива и прочитанное помещается в void *pBuffer
Так что переделать структуру чтения никак не получится…

Автор: Aleksandor 6.12.2006, 22:07
А зачем функции чтения из файла если данные уже прочитаны и лежат в буфере??
А если еще не прочитаны, то ReadFile целиком в буфер или CreateFileMapping

Автор: ZC1989 6.12.2006, 22:15
Aleksandor, мне после того как файл прочитан из архива нужно его разобрать по словам... и если есть более красивая возможность это сделать не через функции чтения подскажите smile 

Автор: Aleksandor 6.12.2006, 22:21
а что значит разобрать по словам ?

Автор: ZC1989 6.12.2006, 22:48
Aleksandor, в файле написаны слова в привычном понимании, так вот мне нужно получать одно за одним и уже плясать от того что это за слово... вобщем перебрать файл по словам разделённым пробелами smile вот как-то так

Автор: Aleksandor 6.12.2006, 23:27
в run-time есть strpbrk и strchr, можно их заюэать или написать свой аналог типа MyReadNextWord(...)
Код

ptr=bufferptr;

while (ptr<bufferptr+bufferlength) {
endptr=strchr(ptr, ' ');
if (endptr==NULL) endptr=bufferptr+bufferlength;
size=endptr-ptr;
for (i=0; i<MAX_INDEX; i++) {
if (strlen(mysecretwords[i])!=size) continue;
if (CSTR_EQUAL==CompareString(LOCALE_SYSTEM_DEFAULT,NORM_IGNORECASE,ptr,size,mysecretwords[i],-1))  {
// trevoga!
}
}
while (*ptr==' ') ptr++; // skip spaces
}



Автор: ZC1989 6.12.2006, 23:31
Aleksandor, пасиб, я попробую это,  ну а на кройняк, отчаившись буду временный файл создавать, туда записывать биты и уже привычно их читать... - самый бредовый вариан за сегодня smile 

Автор: ZC1989 7.12.2006, 00:04
Aleksandor, слушай, я попробовал вывести в командной строке содержимое файла побитовое получил 0х00320940 (в файле написано слово "testing") это нормально? ЗЫ: никогда до этого с битами не работал... (всё когда-то бывает в первый разsmile 

да, и ещё, в зиповской функции получения битов файла нужно указать размер буфера, но от изменения этой величины реззультат не меняется smile 

Автор: ZC1989 7.12.2006, 00:31
предыдущий вопрос можно проигнорить... начал понимать, наконец-то... остался последний вопрос, как из этого буфера сформировать char * или char[MAX_PATH]? я попробовал, в работе возникает ошибка, через strcpy тож не получается...  smile (если получу даже все слова в одной строке, знаю как потом их раскидать...

Автор: Aleksandor 7.12.2006, 07:05
Может так?
Код

LPVOID bufferptr;
DWORD bufferlength;

char* ptr=(char*) bufferptr;

Автор: ZC1989 7.12.2006, 14:30
это не подходит... вместо нормального слова "testing" на екран выводится ересь... пробовал преобразовывать тож бесполезно... хотя первую букву слова получать получалось через pBuffer[0]  smile , а вот со второй уже проблемы... smile 

Автор: ZC1989 7.12.2006, 15:05
Всё, отбой! smile  со всем разобрался... проблема была не в чтении... я неправильно проинициализировал буфер вместо voidp *pBuffer[MAX_PATH] навоял voidp *pBuffer = new voidp[MAX_PATH] - это собс-но и не давало работать... а щас всё читается правильно! 
Aleksandor, пасибо за помошь smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)