这可能是一个新手问题,但我需要处理某个文本文件并将其内容转储到二进制文件中,我不知道如何 - 我决定使用 perl,但我的 perl 技能很低。我可能应该用 C++ 编写这个,但这对 perl 来说似乎是一个不错的简单任务,那么为什么不学点新东西呢? ;) 文本文件有数千行采用这种格式:
2A02FC42 4
你可以把它看成一个十六进制数(长度是ALWAYS 8)和一个常规数字。现在我需要将所有行转储到这种格式的二进制文件中(用十六进制编辑器查看时应该是这样的):
42FC022A00000004
更多示例以便清楚:
70726F67 36
-> 676F727000000024
6A656374 471
-> 7463656A000001D7
解析输入文件的部分很简单,但我卡在了第二部分,我应该将其写入二进制文件。我不知道如何以这种方式格式化数据,甚至不知道如何以二进制模式输出内容。有人可以帮我吗?
谢谢。
编辑:更新了示例,忘记了 endiannes - 我在 LE 系统上。
最佳答案
使用pack
:
#! /usr/bin/perl
use warnings;
use strict;
# demo only
*ARGV = *DATA;
while (<>) {
my($a,$b) = split;
$a = join "", reverse $a =~ /(..)/g;
$b = sprintf "%08x", $b;
print pack "H*" => $a . $b;
}
__DATA__
2A02FC42 4
70726F67 36
6A656374 471
样本运行:
$ ./prog.pl | od -t x1 0000000 42 fc 02 2a 00 00 00 04 67 6f 72 70 00 00 00 24 0000020 74 63 65 6a 00 00 01 d7 0000030
关于perl - 如何用Perl将指定格式的数据写入二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522348/