FreeWRL / FreeX3D 4.3.0
bin2hex.c
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4
5int main(int argc, char **argv){
6 char *inname;
7 int ncol = 15;
8 if(argc > 1){
9 printf("/* argc= %d argv = [",argc);
10 for(int i=0;i<argc;i++)
11 printf("%s ",argv[i]);
12 printf("] */\n");
13 inname = argv[1];
14 if(argc > 2) sscanf(argv[2],"%d",&ncol);
15 printf("/* inname=%s ncol=%d */\n",inname,ncol);
16
17 FILE *fin = fopen(inname,"r+b");
18 if(fin){
19 unsigned char *buf = malloc(ncol + 1);
20 //convert ..\ProggyClean.ttf to ProggyClean_ttf
21 char *bufname = strdup(inname);
22 char *ir = strrchr(bufname,'\\'); //other / for linux
23 if(ir) bufname = &ir[1];
24 ir = strrchr(bufname,'.');
25 if(ir) ir[0] = '_';
26 //print data
27 printf("unsigned char %s_data[] = \n",bufname);
28 char *sep = "{";
29 int more = 1;
30 int m = 0;
31 do{
32 int nc;
33 nc = ncol;
34 nc = fread(buf,1,nc,fin);
35 if(nc < ncol) more = 0;
36 for(int j=0;j<nc;j++){
37 printf("%s",sep);
38 unsigned int hh = buf[j];
39 printf("0x%.2x",hh);
40 sep = ",";
41 }
42 if(more) printf("\n");
43 m += nc;
44 }while(more);
45 printf("};\n");
46 //print size
47 printf("int %s_size = %d;\n",bufname,m);
48 }
49 } else {
50 printf("testBin2hex <filename_of_bin> [<number_of_columns_default_15>] [> <outfile_name_default_console>] ");
51 }
52
53 getchar();
54 return 0;
55}