首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较代码中的几个二进制字节?

如何比较代码中的几个二进制字节?
EN

Stack Overflow用户
提问于 2021-10-17 14:55:32
回答 1查看 112关注 0票数 3

我读取了一个二进制文件,并希望确保某些特定的字节具有特定的值。perl做这件事的最好方法是什么?

代码语言:javascript
复制
my $blob = File::Slurp::read_file( 'blob.bin', {binmode=>'raw'} );
substr( $blob, 4, 4 ) == #equals what?

我想测试字节5-8是否等于0x32 0x32 0x00 0x04。我应该将substr与什么进行比较?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-17 15:39:24

代码语言:javascript
复制
substr( $blob, 4, 4 ) eq "\x32\x32\x00\x04"

如果它是一个32位无符号数字,您可能更喜欢以下内容:

代码语言:javascript
复制
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

(对于带符号的32位整数,请使用l而不是oaf L。)

在使用unpack时,甚至可以避免substr

代码语言:javascript
复制
unpack( "x4 N", $blob ) == 0x32320004

您还可以使用正则表达式匹配。

代码语言:javascript
复制
$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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69605530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档