我讀取了一個二進制檔案,并希望確保某些特定位元組具有某些特定值。這樣做的最perl方式是什么?
my $blob = File::Slurp::read_file( 'blob.bin', {binmode=>'raw'} );
substr( $blob, 4, 4 ) == #equals what?
我想測驗位元組 5-8 是否相等0x32 0x32 0x00 0x04。我應該將 substr 與什么進行比較?
uj5u.com熱心網友回復:
substr( $blob, 4, 4 ) eq "\x32\x32\x00\x04"
如果它是一個 32 位無符號數,您可能更喜歡以下內容:
unpack( "N", substr( $blob, 4, 4 ) ) == 0x32320004 # Big endian
unpack( "L>", substr( $blob, 4, 4 ) ) == 0x32320004 # Big endian
unpack( "L<", substr( $blob, 4, 4 ) ) == 0x04003232 # Little endian
unpack( "L", substr( $blob, 4, 4 ) ) == ... # Native endian
(使用loaf 代替L有符號的 32 位整數。)
substr甚至可以在使用時避免unpack。
unpack( "x4 N", $blob ) == 0x32320004
您也可以使用正則運算式匹配。
$blob =~ /^.{4}\x32\x32\x00\x04/s
$blob =~ /^ .{4} \x32\x32\x00\x04 /sx
my $packed = pack( "N", 0x32320004 );
$blob =~ /^ .{4} \Q$packed\E /sx
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325978.html
標籤:perl
上一篇:Perl遞回解釋
