http://www.perlmonks.org?node_id=49927

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Does anyone know 1) how to read a binary file then convert it to ascii? 2) how to read an ascii file then convert it to binary?

Replies are listed 'Best First'.
Re: bin2ascii and ascii2bin conversion
by Fastolfe (Vicar) on Jan 05, 2001 at 04:48 UTC
    That depends totally on how you are defining "ascii". Even binary files can be considered ASCII because each byte corresponds to an ASCII value without any conversions at all. FTP defines the difference by interpreting OS-dependent newline sequences with "ASCII" files and not with "binary" files.

    If you're trying to encode 8-bit data into printable text, you probably want MIME::Base64 or MIME::QuotedPrint. Otherwise you're going to need to be much more specific about the nature of your conversion.

Re: bin2ascii and ascii2bin conversion
by extremely (Priest) on Jan 05, 2001 at 05:26 UTC
    I gotta tell you that if you aren't talking about MIME-like encodings, you are going to want to look at pack and unpack. Also you will want to read up on binmode if you don't want perl messing with your data during reads and writes under some operating systems.
Re: bin2ascii and ascii2bin conversion
by Anonymous Monk on Jul 21, 2004 at 12:26 UTC
    aW50b3RvZG5zIDY3NDg5ZTUzNzE5OTI3ZDJiYmE1NGFhMDc3ZTkyNDIw
Re: bin2ascii and ascii2bin conversion
by Anonymous Monk on Jul 24, 2003 at 06:34 UTC
    5

    Originally posted as a Categorized Answer.

Re: bin2ascii and ascii2bin conversion
by Anonymous Monk on Aug 03, 2001 at 16:04 UTC
    Here is a script I wrote to convert binary files to C/C++ include files. It uses ord to convert from binary to a hex string.
    #!/usr/bin/perl -w $source = $ARGV[0]; $dest = $ARGV[1]; unless($source and $dest) { print "Usage: perl bin2hex sourcefile destfile\n"; exit 0; } $/=\1; open SRC, "$source"; open DST, ">$dest"; if (defined(SRC) and defined(DST)) { print DST "unsigned char data[] = {\n "; $n=0; while (<SRC>) { if ($n==8) {$n=0; print DST "\n ";} $toprint = ord $_; if ($toprint < 16) {printf DST "0x0%x, ",$toprint;} else {printf DST "0x%x, ",$toprint;} $n++; } print DST "\n}"; close SRC; close DST; }
    Hope it helps. Chilliwilli.