Outils pour utilisateurs

Outils du site


allegro:code_memfile

**Ceci est une ancienne révision du document !** ----

A PCRE internal error occured. This might be caused by a faulty plugin

Ce code est un programme qui crée un tableau de bytes à partir d'un fichier binaire afin d'être utilisé avec l'addon memfile.\\ FIXME ce code est immonde, j'étais bourré ? <file c mem_maker.c> #include <stdio.h> #include <stdlib.h> #include <string.h> #define FORMAT "0x%2.2x" #define suffix "};" // 2 bytes #define prefix "char file_array[] = {" // 21 bytes #define sep ", " // 2 bytes #define eol "\n\t" // 2 byte #define BYTES_PER_LINES 20 int main(int argc, char *argv[]) { FILE *in, *out; int i, cpt=1; size_t val; char value[BYTES_PER_LINES]; char cont[] = "0xFF"; // 4 bytes - la valeur sera changée char buflen[25]; if (argc != 3) { printf("%s, convertit un fichier binaire en un tableau de char utilisable dans un programme\n", argv[0]); puts("Ce programme attend 2 arguments de la ligne de commande :"); puts("\t- l'@ de la source\n\t- l'@ pour l'output"); return -1; } if (!(in = fopen(argv[1], "rb"))) return -1; if (!(out = fopen(argv[2], "wb"))) return fclose(in),-1; if (fread(value, sizeof(char), 1, in) != 1) goto cleanup; sprintf(cont, FORMAT, value); fwrite(prefix, sizeof(char), 21, out); fwrite(cont, sizeof(char), 4, out); while ((val = fread(value, sizeof(char), BYTES_PER_LINES, in)) > 0) { fwrite(sep, sizeof(char), 2, out); fwrite(eol, sizeof(char), 2, out); cpt += val; for (i=0; i<val; i++) { sprintf(cont, FORMAT, *(value+i)); fwrite(cont, sizeof(char), 4, out); if (i != val-1) fwrite(sep, sizeof(char), 2, out); } } fwrite(suffix, sizeof(char), 2, out); sprintf(buflen, "\n// Longeur = %d", cpt); fwrite(buflen, sizeof(char), strlen(buflen), out); cleanup: fclose(in); fclose(out); return 0; } </file> La taille du tableau est vérifiable en faisant //du -b fichier_binaire//

allegro/code_memfile.1332508010.txt.gz · Dernière modification: 2012/03/23 14:06 par mrhide