简体   繁体   中英

How to output binary files in Perl?

I want to be able to output 0x41 , and have it show up as A .

This is what I have tried so far:

my $out;
open $out, ">file.txt" or die $!;
binmode $out;
print $out 0x41;
close $out;

It outputs 65 instead of A in the resulting file. This is not what I want.

I also have read this similar question , but I wouldn't transfer the answer over. pack a short results to 2 bytes instead of 1 byte.

You can use chr(0x41) .

For larger structures, you can use pack :

pack('c3', 0x41, 0x42, 0x43) # gives "ABC"

Regarding your suspicion of pack , do go read its page - it is extremely versatile. 'c' packs a single byte, 's' (as seen in that question) will pack a two-byte word.

使用chr函数:

print $out chr 0x41

pack need two argument: The first argument explain how and how many data have to be packed:

perl -e 'printf "|%s|\n",pack("c",0x41,0x42,0x44);'
|A|

perl -e 'printf "|%s|\n",pack("c3",0x41,0x42,0x44);'
|ABD|

perl -e 'my @bytes=(0x41,0x42,0x43,0x48..0x54);
         printf "|%s|\n",pack("c".(1+$#bytes),@bytes);'
|ABCHIJKLMNOPQRST|

you could even mix format in the 1st part:

perl -e 'printf "|%s|\n",pack("c3B8",0x41,0x42,0x44,"01000001");'
|ABDA|

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM