perl-参数“xxx”在printf中不是数字
我试图用以下代码从二进制文件中读取前4个字节,这应该是一个uint32_t,指示文件头大小:perl-参数“xxx”在printf中不是数字,perl,Perl,我试图用以下代码从二进制文件中读取前4个字节,这应该是一个uint32_t,指示文件头大小: sysopen(my $inHandle, $fileName, O_RDONLY | O_BINARY) or croak("Failed to open file $fileName"); die if(read($inHandle, my $currDword, 4) != 4); printf("length is %d\n", $currDword); 它给了我 Argum
sysopen(my $inHandle, $fileName, O_RDONLY | O_BINARY)
or croak("Failed to open file $fileName");
die if(read($inHandle, my $currDword, 4) != 4);
printf("length is %d\n", $currDword);
它给了我
Argument "M-\f^B" isn't numeric in printf at sbin.pl line 12.
length is 0
我把事情搞砸了吗?perl是否会自动处理endianness?二进制是小endian,还是有其他方法获取字节?谢谢 您需要将四个字节转换为一个数字。假设它是一个无符号整数,根据字节的顺序,将执行以下两项操作:
my $hsize = unpack('N', $currDword); # Big-endian 12 34 56 78 => 0x12345678
my $hsize = unpack('L>', $currDword); # Big-endian 12 34 56 78 => 0x12345678
my $hsize = unpack('V', $currDword); # Little-endian 12 34 56 78 => 0x78563412
my $hsize = unpack('L<', $currDword); # Little-endian 12 34 56 78 => 0x78563412
您需要使用解包将二进制数转换为perl数。谢谢,是的,就是这样。。