Dělení binárního souboru - skriptem nebo programem
Dusan Zatkovsky
dusan na printsoft.cz
Středa Srpen 6 10:26:28 CEST 2003
Dne út 5. srpen 2003 14:57 jste napsal(a):
> Dobrý den,
>
> mám image soubor, potřebuji ho rozdělit na X částí. Vím, že každá část má
> začínat na "Øÿá" (ASCII, hexd. to je "d8 ff e1") a končit před začátkem
> další.
>
>
> Uvítám jakoukoli použitelnou radu, jak zpracovat skript, nebo program, nebo
> použít nějakých hotových utilit.
>
> Zdraví, Oak.
>
Skuste toto, netestoval som to ale.
Po kompilacii ma 3 parametre:
meno_src_suboru meno_dst_suboru pripona_dst_suboru
#include <cstdio>
#include <string>
const unsigned char DELIM[] = {0xd8, 0xff, 0xe1};
const int DELIM_LEN = 3;
int main(int argc, char** argv)
{
if(argc != 4) return -1;
string src = argv[1];
string dst = argv[2];
string dstex = argv[3];
FILE* fs = fopen(src.c_str(), "rb");
FILE* fd;
if(fs == NULL) return -1;
int step = 0;
unsigned char * buff = new unsigned char[DELIM_LEN];
while(1) {
if(feof(fs)) {
fclose(fs);
fclose(fd);
return 0;
}
char outname[256];
snprintf(outname, 255, "%s%05d.%s", dst.c_str(), step++, dstex.c_str());
fd = fopen(outname, "wb");
if(fd == NULL) return -1;
while(1) {
bool brfg = false;
int rd = fread(buff, 1, DELIM_LEN, fs);
if(feof(fs)) {
fclose(fs);
fclose(fd);
return 0;
}
if(rd != DELIM_LEN) {
fwrite(buff, 1, rd, fd);
fclose(fs);
fclose(fd);
return 0;
}
bool status;
for(int i = 0; i < DELIM_LEN; i++) {
if(buff[i] != DELIM[i]) {
status = false;
break;
}
status = true;
}
if(!status) {
fwrite(buff, 1, rd, fd);
}
if(status) {
fclose(fd);
brfg = true;
fseek(fs, -DELIM_LEN, SEEK_CUR);
}
if(brfg) break;
}
}
}
--
S pozdravom,
Dusan Zatkovsky
Další informace o konferenci Linux