데이터에 unpack 함수를 사용해야합니다. 체크 아웃 Pack/Unpack Tutorial (aka How the System Stores Data).
이것은 당신이 (32 비트를 가정) 올바른 방향으로 가고 얻을해야합니다
또한
#!/usr/bin/perl
use strict;
my $strBuf = "perl rocks";
my $packed = pack("I Z15", length($strBuf), $strBuf);
{
open(my $binFile, '>', "test.bin") || die("Error opening file\n");
binmode $binFile;
print $binFile $packed;
close $binFile;
}
open(my $binFile, '<', "test.bin") || die("Error opening file\n");
binmode $binFile;
my $buffer;
read($binFile, $buffer, 4); ## Read out unsigned int binary data
my $length = unpack("I", $buffer); ## Unpack the data
read($binFile, $buffer, $length); ## Read the length out as binary
my $string = unpack("Z$length", $buffer); ## Unpack the string data in buffer
print "Len: $length String: $string\n";
exit;
당신의 코드는 C에서'unsigned int'가 4 바이트라고 가정합니다. (당신이 알고 있듯이) 대소 문자가 보장되지 않습니다. 이러한 혼란을 피하기위한 더 좋은 방법은 전체 파일을 읽고 _ 처리함으로써 코드가 'unsigned int'가 2 바이트 인 16 비트 플랫폼에서 실행되면 정상적으로 작동하도록하는 것입니다. –
그것이 내가 32 비트라고 가정 한 이유입니다. 나는 메모리에 읽는 것이 좋고 논란의 여지가 있지만 더 좋은 해결책이라는 것에 동의하지만, 처리중인 파일의 크기 나 컴퓨터에서 사용할 수있는 메모리의 크기를 알지 못합니다. 두 솔루션 모두 pit-fall이 있습니다. –
Chris, 메모리로 전체 파일을 읽는 것이 잘못된 정수 크기를 사용하지 않도록하려면 어떻게해야합니까? –