42

I remember seeing in the past a program that would take any file and generate a C array representing that file as output; it would prevent distribution of a separate file in some cases. Which Unix/Linux program does that?

0x6adb015
  • 7,473
  • 4
  • 24
  • 38

5 Answers5

96

xxd -i

John Carter
  • 53,924
  • 26
  • 111
  • 144
CB Bailey
  • 755,051
  • 104
  • 632
  • 656
16

For large files, converting to text and then making the compiler parse it all over again is inefficient and unnecessary. Use objcopy instead:

objcopy -I binary -O elf32-i386 stuff stuff.o

(Adjust the output architecture as necessary for non-x86 platforms.) Then once you link it into your program, you can access it like so:

extern char _binary_stuff_start[], _binary_stuff_end[];
#define SIZE_OF_STUFF (_binary_stuff_end - _binary_stuff_start)

...

foo(_binary_stuff_start[i]);
David
  • 2,947
  • 1
  • 25
  • 19
8
hexdump -v -e '16/1 "0x%x," "\n"'

would generate a C like array from stdin, but there is no declaration, no braces or good formatting.

0x6adb015
  • 7,473
  • 4
  • 24
  • 38
4

I know this is Unix/Linux question, but anyone viewing this that wants to do the same in Windows can use Bin2H.

CodeGoat
  • 1,186
  • 8
  • 6
3

The easiest way is:

xxd -i -a filename
Zibri
  • 9,096
  • 3
  • 52
  • 44