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

标签 perl file-io binary hex

这可能是一个新手问题,但我需要处理某个文本文件并将其内容转储到二进制文件中,我不知道如何 - 我决定使用 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/

相关文章:

git - 如何处理二进制文件的 gitting,例如.mo 文件

CentOS:无法执行在 Mac OS X 上编译的二进制文件

c++ - 在 C++ 中使用正则表达式匹配来确定是否二进制

设置文件权限所需的 perl chmod 帮助

sql-server - T-SQL 写入文件 txt 或 csv

perl:Log::Log4perl 可以在多线程环境中工作吗?

image - 用浮点值写入图像

java - 如何在JSP中保存XML文件?

regex - 在 Perl 中使用预编译正则表达式时的问题

python - Linux 中不同类型的脚本