我有像这样的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}
答案 0 :(得分:0)
您实际上是在打印十进制表示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} }));