sub buf-index ( Buf $buf, +@match ) {
my $elems = @match.elems;
$buf.rotor( $elems => 1 - $elems ).first(* eqv @match.List, :k)
}
my $buf = Buf[uint8].new(0x4D, 0x5A, 0x90, 0x00, 0x03);
say buf-index( $buf, (0x90, 0x00, 0x03)); # 2
On Fri, Feb 1, 2019 at 11:02 PM ToddAndMargo via perl6-users
<[email protected]> wrote:
>
> On 2/1/19 8:26 PM, ToddAndMargo via perl6-users wrote:
> > On 2/1/19 8:07 PM, ToddAndMargo via perl6-users wrote:
> >> On 2/1/19 8:03 PM, ToddAndMargo via perl6-users wrote:
> >>> > On Fri, Feb 1, 2019 at 9:37 PM ToddAndMargo via perl6-users
> >>> > <[email protected]> wrote:
> >>> >>
> >>> >> On 2/1/19 7:22 PM, ToddAndMargo via perl6-users wrote:
> >>> >>> Hi All,
> >>> >>>
> >>> >>> On a type Buf, what do I use to check for the
> >>> >>> position of a byte pattern?
> >>> >>>
> >>> >>>
> >>> >>> Many thanks,
> >>> >>> -T
> >>> >>
> >>> >>
> >>> >> Basically, what am I doing wrong here?
> >>> >>
> >>> >> $ p6 'my $handle=open("filever.exe", :bin, :ro); my Buf $b; $b=
> >>> >> $handle.read(5); say $b; say $b[2..4];; if ( $b[2..4] eq
> >>> 0x90,0x00,0x04
> >>> >> ) {say "y";} else {say "n"}; $handle.close;'
> >>> >> Buf[uint8]:0x<4D 5A 90 00 03>
> >>> >> (144 0 3)
> >>> >> y
> >>> >>
> >>> >>
> >>> >> I am testing to see if the pattern 0x90 0x00 0x04 exists,
> >>> >> which is does not.
> >>>
> >>>
> >>> On 2/1/19 7:57 PM, Brad Gilbert wrote:
> >>>> `eq` is string equality
> >>>> `==` is numeric equality
> >>>>
> >>>> a Buf is neither.
> >>>>
> >>>> You want `eqv` (equivalent)
> >>>>
> >>>> $b[2..4] eqv (0x90,0x00,0x04)
> >>>>
> >>>
> >>> That was it. Thank you!
> >>>
> >>> $ p6 'my $handle=open("filever.exe", :bin, :ro); my Buf $b; $b=
> >>> $handle.read(5); say $b; if ( $b[2..4] eqv (0x90,0x00,0x03) ) {say
> >>> "y";} else {say "n"}; $handle.close;'
> >>> Buf[uint8]:0x<4D 5A 90 00 03>
> >>> y
> >>>
> >>> $ p6 'my $handle=open("filever.exe", :bin, :ro); my Buf $b; $b=
> >>> $handle.read(5); say $b; if ( $b[2..4] eqv (0x90,0x00,0x04) ) {say
> >>> "y";} else {say "n"}; $handle.close;'
> >>> Buf[uint8]:0x<4D 5A 90 00 03>
> >>> n
> >>
> >>
> >> How do I find the position of a pattern in a Buf?
> >
> > Need `pos` for Buf
>
> Actually I do believe it is the binary equivalent of `index` I
> am looking for
>
> --
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Computers are like air conditioners.
> They malfunction when you open windows
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~