Mega Code Archive

 
Categories / Delphi / Examples
 

Bin2hex - script to convert data files into source code arrays

Looking for a way to convert a binary (or even a text) file into a Perl, Pascal/Delphi, C/C++, or Java source code array? For example, you may want to do this to include a GIF or other binary file directly inside your Perl CGI script, rather than reading the data from a file to reduce file access. If you're writing Windows programs, you could use the same method to store resource files in your executable files. The bin2hex.pl script will take a binary file name and output a source code array, in the specified language, necessary to recreate the input data inside a program. To run the script, first make sure that you have a Perl interpreter installed on your system and download the bin2hex.pl script. Then execute the following command from your command prompt (assuming you want to convert a file named banner.gif to a Perl string): perl bin2hex.pl banner.gif 0 >source.txt Listing #1 : TEXT code. Download demo1.bat (0.17 KB). You will end-up with a source.txt file with content similar to the following: # begin binary data: $bin_data = # 42 "x47x49x46x38x39x61x01". "x00x01x00x80x00x00x00x00". "x00xFFxFFxFFx21xF9x04". "x01x00x00x00x00x2Cx00x00". "x00x00x01x00x01x00x40". "x02x01x44x00x3B"; # end binary data. size = 42 bytes Listing #2 : TEXT code. Download result1.txt (0.27 KB). -------------------------------------------------------------------------------- bin2hex.pl script Usage: perl bin2hex.pl <binary_file_name> <language_id> binary_file_name The input file name language_id The language identifier (source code array will be generated in this language): 0 - Perl or similar language(default) 1 - C / C++ / Java or similar language 2 - Pascal / Delphi or similar language # # bin2hex.pl by Chami.com # http://www.chami.com/tips/ # # number of characters per line $chars_per_line = 15; # ------------------------------------- # language id # # 0 = Perl (default) # 1 = C / C++ # 2 = Pascal / Delphi # $lang = $ARGV[1]; $rem_begin = "begin binary data:"; $rem_end = "end binary data."; # initialize for Perl strings # by default $_var = "# $rem_beginn". "$bin_data = # %dn"; $_begin = """; $_end = "";n"; $_break = "".n""; $_format = "\x%02X"; $_separator = ""; $_comment = "# $rem_end ". "size = %d bytes"; # C / C++ if(1 == $lang) { $_var = "/* $rem_begin */n". "char bin_data[] = ". "/* %d */n"; $_begin = "{"; $_end = "};n"; $_break = "n"; $_format = "0x%02X"; $_separator = ","; $_comment = "/* $rem_end ". "size = %d bytes */"; } elsif(2 == $lang) { $_var = "{ $rem_begin }n". "const bin_data : ". "array [1..%d] of ". "byte = n"; $_begin = "("; $_end = ");n"; $_break = "n"; $_format = "$%02X"; $_separator = ","; $_comment = "{ $rem_end ". "size = %d bytes }"; } if(open(F, "<".$ARGV[0])) { binmode(F); $s = ''; $i = 0; $count = 0; $first = 1; $s .= $_begin; while(!eof(F)) { if($i >= $chars_per_line) { $s .= $_break; $i = 0; } if(!$first) { $s .= $_separator; } $s .= sprintf( $_format, ord(getc(F))); ++$i; ++$count; $first = 0; } $s .= $_end; $s .= sprintf $_comment, $count; $s .= "nn"; $s = "n".sprintf($_var, $count).$s; print $s; close( F ); } else { print "bin2hex.pl by Chami.comn". "n". "usage:n". " perl bin2hex.pl <binary file>". " <language id>n". "n". " <binary file> : path to the ". "binary filen". " <language id> : 0 = Perl, ". "1 = C/C++/Java, ". "2 = Pascal/Delphin". "n"; } Listing #3 : PERL code. Download bin2hex.pl (0.91 KB). Applicable Keywords : C Language, Common Gateway Interface, C++, Delphi, HTML, JavaScript, Perl, Programming, PerlScript, Source Code, Software