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

如何使用Perl将C结构的内容写入文件,perl,Perl,我有这样一个C结构 struct _RxMsg { int index; int status; unsigned char packet[1024]; } rx_msg; 我可以使用模块在Perl中访问此结构。元素数据包[1024]填充了一些通过网络到达的二进制数据(假设是文本文件的内容) 如果我转储元素,我可以看到内容 open $fp, '>>', "file.txt" or die $!; binmode $fp; /* I set bin

我有这样一个C结构

struct _RxMsg {
    int index;
    int status;
    unsigned char packet[1024];
} rx_msg;
我可以使用模块在Perl中访问此结构。元素
数据包[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}

的简单二进制内容时,实际上是打印十进制表示法
char
值,而不是它们的十六进制表示法。您要做的是将每个数字打印为一个字节
chr
pack'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} }));

如果你写二进制数据,它不是一个文本文件。@Barmar-对不起,也许我的解释不太正确。问题是我从网络接收到文件的一些内容,并将其存储到“C”结构中。我想创建一个文件,它的二进制内容应该是“C”结构中的值。我的要求现在更容易理解了吗?不,这一点也不清楚。我理解将二进制内容写入文件意味着什么,但这使它成为二进制文件,而不是文本文件。无论如何,我怀疑
pack()
是您正在寻找的函数。
{use Data::Dumper;local$Data::Dumper::Useqq=1;print(Dumper($rx_msg->{packet}));}
?@ikegami:从Convert::Binary::C文档中看,这样的输出会是什么