C Array Dumper(一个将任意文件转成C语言数组文本的东西)

因工作和个人爱好需要,最近要写一些内存受限系统上的程序(或者说嵌入式),将一个将任意文件转成C语言数组文本是频繁遇到的一个功能请求。网上有很多现成的工具:

比如,

http://d.download.csdn.net/down/635265/pajoke (我花了一个积分试了一下,GUI版的不错。)

http://www.pudn.com/downloads82/sourcecode/others/detail317550.html

http://hi.baidu.com/%C9%B3%BC%D3%BB%C6%BD%F0%CA%A5%B6%B7%CA%BF/blog/item/d3bb5bdd2e0326e576c638c8.html

 

上述三个工具各有特点,而让区区决定另写一个(Yet another真是程序员的顽症啊)的原因为,是要适应Makefile和jam的自动化构建行为。上述版本要么强调GUI,要么Hardcode参数,非吾辈之好~~

 

使用方式是命令行"cadump 数组名 输入文件名 > 输出文件名"

 

程序很短,使用cl编译后,就放到path里了,欢迎大家分享。

 

#include<stdio.h> #include<fcntl.h> #include<io.h> int main(int argc, char * argv[]) { const int CLINE = 16; FILE *pin = stdin; char *array_name = NULL; int c = 0, lastc=EOF; int ccount = 0; argv++;argc--; //no need program name if (argc ) { array_name = argv[0]; argv++;argc--; } else { fprintf(stderr, "Array Name Must Be Supplied./n", argv[1]); exit(1); } if (argc) { pin = fopen(argv[0], "rb"); if (pin == NULL) { fprintf(stderr, "Error Open File %s./n", argv[1]); exit(1); } } else { _setmode(_fileno(stdin), O_BINARY); } printf("/*** Generated by cadump. Don't edit! ***//n unsigned char %s[] = {", array_name); for(c = fgetc(pin); c!=EOF; c = fgetc(pin)) { if (lastc!=EOF) printf("0x%02X,", lastc); lastc = c; if (ccount++ % CLINE == 0) printf("/n"); } printf("0x%02X", lastc); printf("/n};/n"); }

你可能感兴趣的:(c,File,null,语言,工具,makefile)