Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Konvertuje binarni soubor na soubor *.c tak, aby po prelozeni se tento
- soubor stal soucasti vysledneho spustitelneho souboru. Je to zpusob jako
- do (zejmena) knihoven zabalit krome prelozitelnych zdrojovych kodu
- take i skripty, napriklad knihovnu v javascriptu. Ale lze to take pouzit
- pro vlozeni obrazku a jinych binarnich souboru, pokud to ma smysl
- Program vypisuje vysledny zdrojak na standardni vystup. Je mozne primo propojit s gcc
- bin2c soubor.dat nazev_souboru | gcc -c -o output.o -xc -Wall -Wno-trigraphs -
- vysledek bude v souboru output.o a vlastni soubor bude dostupny v promenne
- extern const char *nazev_souboru;
- a případně v
- extern unsigned int nazev_souboru_length;
- bude velikost
- */
- #include <stdio.h>
- #include <errno.h>
- int main(int argc, char **argv) {
- if (argc != 3) {
- fputs("bin2c <file> <identifier>\n",stderr);
- return 1;
- } else {
- FILE *f = fopen(argv[1],"rb");
- if (f == NULL) {
- fprintf(stderr,"Can't open input file '%s'", argv[1]);
- return errno;
- }
- printf("const char *%s=\"",argv[2]);
- int i = fgetc(f);
- int cnt = 0;
- unsigned int size = 0;
- while (i != -1) {
- size++;
- if (i >= 32 && i!='"' && i!='\\') putchar(i);
- else if (i == '"') {
- putchar('\\'); putchar('"');
- } else if (i == '\\') {
- putchar('\\'); putchar('\\');
- } else if (i == '\n') {
- putchar('\\'); putchar('n');
- } else if (i == '\r') {
- putchar('\\'); putchar('r');
- } else if (i == '\t') {
- putchar('\\'); putchar('t');
- } else {
- printf("\\%03o",i);
- }
- cnt++;
- if (cnt == 80) {
- printf("\"\n\"");
- cnt = 0;
- }
- i = fgetc(f);
- }
- fclose(f);
- printf("\";\n");
- printf("unsigned int %s_length=%u;\n",argv[2],size);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment