如何使用Perl将C结构的内容写入文件

时间:2014-05-07 23:57:15

标签: perl

我有像这样的C结构

struct _RxMsg {
    int index;
    int status;
    unsigned char packet[1024];
} rx_msg;

我可以使用Convert::Binary::C模块在​​Perl中访问此结构。元素packet[1024]填充了一些通过网络到达的二进制数据(假定文本文件的内容)。

如果我转储元素,我可以看到内容。

open $fp, '>>', "file.txt" or die $!;
binmode $fp;      /* I set binmode but still no good */  
for ($rx_msg->{packet}) {
  print $fp @$_;  /* This is writing the binary content as hex into the file. */
}

但是当我想编写rx_msg->{packet}

的简单二进制内容时,写入文件的内容是十六进制的

1 个答案:

答案 0 :(得分:0)

您实际上是在打印十进制表示char值,而不是十六进制表示。你想要做的是将每个数字打印为一个字节。 chrpack 'C'可用于将数字转换为字节。

open(my $fh, '>>:raw', 'file.txt') or die $!;

# Same thing:
#open(my $fh, '>>', 'file.dat') or die $!;
#binmode($fh);

print($fh, pack('C*', @{ $rx_msg->{packet} }));