如何使用Perl将指定格式的数据写入二进制文件?

Pet*_*erK 2 binary perl file-io hex

这可能是一个相当新手的问题,但我需要处理某个文本文件并将其内容转储到二进制文件中,我不知道如何 - 我决定使用perl,但我的perl技能非常低.我可能应该用C++编写这个,但对于perl来说这似乎是一个很好的简单任务,所以为什么不学习新的东西呢?;)文本文件有以下格式的数千行:

2A02FC42 4

您可以将其视为十六进制数字(长度始终为 8)和常规数字.现在我需要以这种格式将所有行转储到二进制文件中(当使用十六进制编辑器查看时,它应该如下所示):

42FC022A00000004

更多例子很清楚:

70726F67 36- > 676F727000000024
6A656374 471- > 7463656A000001D7

解析输入文件的部分很简单,但我仍然停留在第二部分,我应该将其写入二进制文件.我不知道如何以这种方式格式化数据,甚至不知道如何以二进制模式输出数据.有人可以帮帮我吗?

谢谢.

编辑:更新了示例,忘记了endiannes - 我在LE系统上.

Gre*_*con 6

用途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
Run Code Online (Sandbox Code Playgroud)

样品运行:

$ ./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