我正在尝试使用以下代码读取二进制文件中的前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);
Run Code Online (Sandbox Code Playgroud)
它给了我
Argument "M-\f^B" isn't numeric in printf at sbin.pl line 12.
length is 0
Run Code Online (Sandbox Code Playgroud)
我弄乱了什么吗?perl也会自动处理字节序(二进制是小端),还是有其他方法来获取字节?谢谢!
小智 9
您需要将四个字节转换为数字.假设它是一个无符号整数,下面的两个将根据字节的顺序执行:
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
Run Code Online (Sandbox Code Playgroud)