使用Perl将文本文件转换为二进制文件时出现问题

亚历山大·达奎尔

我想使用Perl将某些数据转换为二进制。数据需要以8位二进制输出。原始数据采用以下格式:

137.0000
136.0000
133.0000
136.0000
10.0000
134.0000
0.0000
132.0000
132.0000

为此,我转换了数据以抑制“ .0000”,然后使用pack带有该选项函数C*(根据文档,此格式对应于“无符号字符(通常为8位)”)。我称这个文件为txt2bin.pl

my $file = $ARGV[0];
my $fileout = $file.".bin";

if($file eq "-h" or $file eq "-help" or $file eq "")
{  
    print "Usage : txt2bin.pl file_in\n";
    print "        file_out = file_in.bin\n";
    print "This script converts a txt file to a binary file\n";

}

else
{
  print "File in = $file\n";
  print "File out = $fileout\n";

  open(FILE,"<$file") or die $!;
  open(FILEOUT,">$fileout") or die $!;
    binmode FILEOUT;
    while(defined(my $line=<FILE>))
    {
      chomp($line);
      $line =~ s/\.0000//;
      syswrite FILEOUT, pack("C*",$line);
    }
  close(FILE);
  close(FILEOUT);
}

我还需要能够执行反向操作,因此,我创建了另一个文件bin2txt.pl

my $file = $ARGV[0];
my $fileout = $file.".txt";

if($file eq "-h" or $file eq "-help" or $file eq "")
{
    print "Usage : bin2txt.pl file_in\n";
    print "        file_out = file_in.txt\n";
    print "This script converts a binairy file to a txt file\n";
}

else
{
  print "File in = $file\n";
  print "File out = $fileout\n";

  my $file = "<$file";

  # undef $/ to read whole file in one go
  undef $/;

  open(FILE,$file) or die $!;
  open(FILEOUT,">$fileout") or die $!;

  # binmode FILE to supress conversion of line endings
  binmode FILE;

  my $data = <FILE>;
  $data =~ s/(.{1})/unpack("C*",$1).".0000 \n"/eg;
  syswrite FILEOUT, $data;
}

但是,当我执行第一个程序txt2bin.pl,然后执行第二个程序时,我应该得到:

137.0000
136.0000
133.0000
136.0000
10.0000
134.0000
0.0000
132.0000
132.0000

相反,我得到了这个:

137.0000
136.0000
133.0000
136.0000

134.0000
0.0000
132.0000
132.0000

10.0000不露面,难道你们对此有任何想法?感谢您的帮助。

HåkonHægland

您需要将s修饰符添加到regexp替换中,以匹配10(换行符):

$data =~ s/(.{1})/unpack("C*",$1).".0000 \n"/seg;

perldoc perlre

s
将字符串视为单行。即,更改“。” 匹配任何字符,即使是换行符,通常不会匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Linux命令将文本文件转换为二进制文件

Python:将文本文件转换为二进制文件

将文本文件转换为C中的二进制文件

将文本文件中的二进制数据转换为文本格式

使用python将文本文件内容转换为csv格式时出现问题

在C中将二进制文件转换为文本文件

如何将二进制文件转换为包含int和chars的文本文件

读取二进制文件时出现问题

将带有数字的文本文件转换为二进制

使用awk将二进制数作为字符串存储在文本文件中,然后转换为十六进制

使用MarkLogic REST API将文本文件加载为二进制文件

来宾Linux系统使用ls将文本文件视为二进制文件

将列表写入二进制文件时出现问题

无法将二进制文件转换为文本

使用fread函数读取二进制文件时出现问题

将包含二进制表示形式的数据(仅为0)的文本文件转换为python中的.bin文件

如何使git将.strings文件视为文本文件而不是二进制文件

二进制文件到文本文件的转换

文本文件的二进制输入

写入/读取二进制/文本文件

使用地址,字节值和注释将文本文件解析为二进制文件

使用While循环时转换为二进制文件的问题

将二进制数字写入文本文件[MATLAB]

上载二进制序列化文件时出现问题

通过套接字,Python发送二进制文件时出现问题

从二进制文件读取或创建它时出现问题

如何使用 io::Cursor 和 byteorder 读取混合二进制/文本文件?

使用Java对文本文件执行二进制搜索

为什么二进制文件不是文本文件,而所有文本文件都是二进制文件?