ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |

24.02.2008, 17:17
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Работа с бинарным файлом
Есть бинарный файл на треть состоящий из обычных текстовых символов.Естественно что такие ф-ции как strstr strtok и им подобные использовать неудается.Как можно из этого файла "выпотрошить" текст который там содержится?
|
|
|

24.02.2008, 17:54
|
|
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме: 3493315
Репутация:
1228
|
|
чет я вопроса не понял...
Какая разница какие там символы печатные или нет, ты работаеш с их кодом, поэтому все строковые функции работают. открывай через rb и работай
|
|
|

24.02.2008, 18:08
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от nc.STRIEM
чет я вопроса не понял...
Какая разница какие там символы печатные или нет, ты работаеш с их кодом, поэтому все строковые функции работают. открывай через rb и работай
Я уже так пытался.Вообщем я имею в виду этот файл Х:\Documents and Settings\user\Application Data\ICQ\номераськи\номераськи .FB
Если его открывать через fopen(с параметром чтения rb ) и читать fread ,то ниче кроме "AOL Feedbag 1.1" все ф-ции для работы с текстом невидят 
ЗЫ:файл от оф. асику клиента 6й версии
|
|
|

24.02.2008, 18:18
|
|
Moderator - Level 7
Регистрация: 16.02.2008
Сообщений: 580
Провел на форуме: 1595333
Репутация:
291
|
|
хз получится или нет потому что код юниховы.
Код:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int d,sz;
char buffer[1024];
d=open("путь_к_файлу", O_RDRW);
while ((sz=read(d, buffer, 1024))>0) {
/*твои действия*/
};
return 0;
}
а вообще прально. нет разницы какой тип файла когда его открываешь, так что в принципе все должно работать
Последний раз редактировалось zythar; 24.02.2008 в 18:21..
|
|
|

24.02.2008, 18:20
|
|
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме: 3493315
Репутация:
1228
|
|
покажи код.
Вот те для примера прога для конвертации бинарных файлов
Код:
#include <stdio.h>
#include <IO.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if(argc < 2)
return printf("USE: %s file_path\n", argv[0]);
FILE *fr, *fw;
fr=fopen(argv[1], "rb");
fw=fopen("result.txt", "wb");
if(!fr || !fw)
return printf("Open file error\n");
int size=filelength(fileno(fr));
unsigned char c;
while(size > 0)
{
c=fgetc(fr);
printf("\\0x%X", c);
fprintf(fw, "\\0x%X", c);
size--;
}
fclose(fw);
fclose(fr);
system("result.txt");
remove("result.txt");
return 0;
}
Последний раз редактировалось nc.STRIEM; 24.02.2008 в 18:22..
|
|
|

24.02.2008, 18:54
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Сообщение от nc.STRIEM
покажи код.
Вот те для примера прога для конвертации бинарных файлов
Код:
#include <stdio.h>
#include <IO.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if(argc < 2)
return printf("USE: %s file_path\n", argv[0]);
FILE *fr, *fw;
fr=fopen(argv[1], "rb");
fw=fopen("result.txt", "wb");
if(!fr || !fw)
return printf("Open file error\n");
int size=filelength(fileno(fr));
unsigned char c;
while(size > 0)
{
c=fgetc(fr);
printf("\\0x%X", c);
fprintf(fw, "\\0x%X", c);
size--;
}
fclose(fw);
fclose(fr);
system("result.txt");
remove("result.txt");
return 0;
}
Пример какай то странный .Я его вот так изменил
Код:
main()
{
char a[256];
ExpandEnvironmentStrings("%HOMEPATH%",a,256);
strcat(a,"\\Application Data\\ICQ\\208190791\\208190791.FB");
FILE *fr, *fw;
fr=fopen(a, "rb");
fw=fopen("result.txt", "wb");
int size=filelength(fileno(fr));
unsigned char c;
while(size > 0)
{
c=fgetc(fr);
printf("\\0x%X", c);
fprintf(fw, "\\0x%X", c);
size--;
}
fclose(fw);
fclose(fr);
system("result.txt");
remove("result.txt");
return 0;
}
В и тоге он мне в stdout выдает бесконечный поток \0xFF
А вот и мой код
Код:
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
int stf(char *buf=new char[1024*10])
{
int sz,n,stop;
char a[256];
DWORD szf,rb;
char *buf2=new char[1024*10];
ExpandEnvironmentStrings("%HOMEPATH%",a,256);
strcat(a,"\\Application Data\\ICQ\\208190791\\208190791.FB");
HANDLE h=CreateFile(a,GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
szf=GetFileSize(h,0);
stop=0;
ReadFile(h,buf2,szf,&rb,NULL);
for(;;)
{
if(strlen(buf2)>0)
{
strcat(buf,buf2);
buf2+=strlen(buf2);
}
if(strlen(buf2)==0)
{
buf2+=1;
stop++;
}
if((strlen(buf))+stop==szf)
{
break;
}
}
CloseHandle(h);
return(szf);
}
main()
{
char *a=new char[1024*10];
cout<<stf(a)<<"\n";
printf(a);
getch();
}
Но он кроме текста выводит ещё кучу левого мусора  Может у кого есть идеи как от него исбавится?
Последний раз редактировалось _nic; 24.02.2008 в 19:48..
|
|
|

26.02.2008, 22:35
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
не туда копаешь!
разберись что есть МУСОР!!!!
если мусор это корябушки КОИ-8 отображающиеся в 1251, или наоборот.... или DOS кодировка,
то с твоим определением мусора можно не согласится!
Ты запросто мог отфильтровать свой ВЫВОД по коду символа обратившись к таблице
Пуск->Программы->Стандартные->cлужебные->Таблица символов
....
в том то и дело что ты ищешь универсальной перекодировки .... которой не существует, по той причине , что только у символов английского языка "зарезервировано место" а у остальных языков "птичьи права"
Последний раз редактировалось Delimiter; 27.02.2008 в 01:05..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|