
07.05.2009, 17:44
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
ну чисто поверхностный осмотр
в начале идут 04 XX - это unicode строка русская
потом идет хрен знает че потом rtf
вот функцию я писал для mail history reader (я в курсе что она не совершенна)
Код:
#include <stdio.h>
#define BYTE(l,h) (((l)<<4)|((h)&0xFF))
void rtf2char(unsigned char *data,size_t max,FILE *f)
{
size_t uk=0;
unsigned char c;
while(uk<max)
{
// 5C = \
// 27 = '
// \'
if(data[uk]==0x5C && data[uk+1]==0x27)
{
uk+=2;
while(data[uk]<0x40){fputc(data[uk],f);uk++;}
if(data[uk]>=0x60){data[uk]-=0x57;}
else if(data[uk]>=0x30){data[uk]-=0x30;}
if(data[uk+1]>=0x60){data[uk+1]-=0x57;}
else if(data[uk+1]>=0x30){data[uk+1]-=0x30;}
c=BYTE(data[uk],data[uk+1]);
fputc(c,f);
uk+=2;
while(data[uk]<0x40){fputc(data[uk],f);uk++;}
}
else{uk++;}
}
}
int main(int argc, char* argv[])
{
FILE *f,*out;
int szbuffer=0;
unsigned char *buffer;
unsigned long si=0;
f=fopen("psix.test","rb");
if(f==NULL){printf("Error open!"); return 0;}
out=fopen("test.txt","w");
if(out==NULL){printf("Error open out file!"); return 0;}
fseek (f , 0 , SEEK_END);
szbuffer = ftell (f);
rewind (f);
buffer=(unsigned char *)malloc(szbuffer);
if (buffer == NULL) {printf("Memory Error\n"); exit (2);}
if (fread (buffer,1,szbuffer,f) != szbuffer) {printf ("Reading error\n"); free(buffer); exit (3);}
rtf2char(buffer,szbuffer,out);
free(buffer);
fclose(out);
fclose(f);
return 0;
}
воть, програмулина тебе в test.txt выдаст все че было в rtf  можно поколдавать и сделать еще красивее.
а вообще правильно надо хоть часть знать что там должно быть, что бы пытатся писать прогу читалку
Последний раз редактировалось Gar|k; 07.05.2009 в 17:57..
|
|
|