将'纯c源代码'中的'文件'存储为char *

时间:2011-12-28 14:03:55

标签: c pointers char

我需要将一些东西存储在源代码中作为char数组,以便稍后阅读,

如何将它作为char指针存储在源文件中以及如何将二进制文件转换为char指针?

我记得之前我看过一些演示使用这种方式发布小型演示而不带一些小文件,例如5k甚至100k大小的文件。

3 个答案:

答案 0 :(得分:2)

xxd工具可以执行此操作:

xxd -i inputfile

答案 1 :(得分:0)

我通常使用简单的Perl / Ruby / Python脚本将二进制数据转换为C源代码:

# Python script bin_to_c.py
import sys

i = 0
res = []
res.append("unsigned char data[] = \"")
for c in sys.stdin.read():
  if i % 15 == 0:
    res.append("\"\n    \"")
  res.append("\\x%02x" % ord(c))
  i += 1

print ''.join(res) + '";'
print "size_t data_size = sizeof(data) - 1;"

然后,您可以将输出粘贴到C文件中,如下所示:

python bin_to_c.py < input.bin > data.c

答案 2 :(得分:0)

我不确定您是要打开二进制文件还是二进制模式。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE *fp = NULL;
    int len = 0;
    char * file_buff = NULL;

    if ((fp = fopen("file1", "rb")) == NULL) {
        printf("Failed to open file\n"); 
        return EXIT_FAILURE;
    }   

    fseek(fp, 0, SEEK_END);
    len = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    if ((file_buff = (char *) malloc((int)sizeof(char) * len)) == NULL) {
        printf("ERROR: unable to allocate memory\n");
        return EXIT_FAILURE;
    }   

    fread(file_buff, len, 1, fp);   
    fclose(fp);

    printf("Contents of the file : \n%s", file_buff);

    /* do whatever you wanted to do with file_buff here */

    /* once done, free the file buffer */
    free(file_buff);

    return EXIT_SUCCESS;
}