FreeWRL/FreeX3D  3.0.0
bin2hex.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 int 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 }