demo2000 | bonjour,
j'ai fait un programme qui fait se qui suit :
Fichier binaire :
Citation :
A1 A2 A3 A4 30 81 03 B1 B2 B3
A1 A2 A3 A4 30 82 00 04 B1 B2 B3 B4
A1 A2 A3 A4 30 83 00 00 03 B1 B2 B3 B4 B5
A1 A2 A3 A4 30 84 00 00 00 04 B1 B2 B3 B4 B5
A1 A2 A3 A4 30 07 B1 B2 B3 B4 B5 B6 B7
|
resultat :
Citation :
30 81 03 B1 B2 B3
30 82 00 04 B1 B2 B3 B4
30 83 00 00 03 B1 B2 B3 B4 B5
30 84 00 00 00 04 B1 B2 B3 B4 B5
30 07 B1 B2 B3 B4 B5 B6 B7
|
1- supprimer les 4 premier octets (couleur orange).
2- lire le tag suivant '30' (couleur noir).
3- lire le tag suivant INDIC (couleur rouge)
4- lire le length de l'information :
si INDIC est 81 le length de l'information (couleur vert) est sur 1 octet, 82 --> 2octet, 83 -->3octet, 84 -->4 octet.
si non INDIC = length de l'information (dernière ligne dans l'exemple).
voilà ou je suis :
Code :
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- int main(int argc, char ** argv) {
- FILE *infile;
- FILE *outfile;
- char buf[256]; // buffer de lecture
- static const char sequence[4] = {0x81,0x82,0x83,0x84};
- char header[4]; // header
- unsigned char nb;
- unsigned char step;
- unsigned char tag[2];
- unsigned long nbcdrall=0;
- int i,offset=24,nbcdrerr=0;
- unsigned char *name;
- if ((infile = fopen(argv[1], "rb" )) == NULL)
- {
- fprintf(stderr, "Pb ouverture infile !\n" );
- return(EXIT_FAILURE);
- }
- if((name = strdup(argv[1])) == NULL)
- {
- fprintf(stderr,"Pb avec strdup !\n" );
- return(EXIT_FAILURE);
- }
- if((outfile = fopen(strcat(argv[1],".NEW" ),"wb" )) == NULL)
- {
- fprintf(stderr, "Pb ouverture outfile !\n" );
- fclose(infile);
- return(EXIT_FAILURE);
- }
- while (fread(header, 1, 4, infile) > 0)
- {
- if(!fread(tag, 1, 2, infile)) // read tag '30' and cdt
- {
- fprintf(stderr,"fread tag Failure !\n" );
- return(EXIT_FAILURE);
- }
- if((unsigned char)tag[1] == (unsigned char)sequence[0])
- {
- step='1';
- }
- else if((unsigned char)tag[1] == (unsigned char)sequence[1])
- {
- step='2';
- }
- else if((unsigned char)tag[1] == (unsigned char)sequence[2])
- {
- step='3';
- }
- else if((unsigned char)tag[1] == (unsigned char)sequence[3])
- {
- step='4';
- }
- else
- step='0';
- /*
- switch (((unsigned char)tag[1]))
- {
- case ((unsigned char)sequence[0]):step=1;break;
- case ((unsigned char)sequence[1]):step=2;break;
- case ((unsigned char)sequence[2]):step=3;break;
- case ((unsigned char)sequence[3]):step=4;break;
- case default:step=0;
- }
- */
- if(!fread(&nb, 1, step, infile))
- {
- fclose(infile);
- fclose(outfile);
- fprintf(stderr, "Pb lecture infile !\n" );
- return(EXIT_FAILURE);
- }
- if(fread(buf, 1, nb, infile) != (unsigned int) nb)
- {
- fclose(infile);
- fclose(outfile);
- fprintf(stderr, "Pb lecture infile !\n" );
- return(EXIT_FAILURE);
- }
- if((fwrite(tag, 1, 1, outfile)==0)|| (fwrite(buf, 1, nb , outfile)==0))
- {
- fprintf(stderr,"fwrite failure !\n" );
- return(EXIT_FAILURE);
- }
- }
- if(rename(argv[1],name)!=0)
- {
- fprintf(stderr,"rename failure !\n" );
- return(EXIT_FAILURE);
- }
- return(EXIT_SUCCESS);
- }
|
si qlq à une meilleur idées ou un code plus simple je suis preneur !
Merci
|