[erlang-questions] bit syntax: what does "<<1234>> =" match?
Robert Virding
robert.virding@REDACTED
Mon Feb 28 14:15:18 CET 2011
----- "Anthony Ramine" <nox@REDACTED> wrote:
> Le 28 févr. 2011 à 01:40, Robert Virding a écrit :
>
> >
> > ----- "Anthony Ramine" <nox@REDACTED> wrote:
> >
> >> Le 26 févr. 2011 à 20:28, Robert Virding a écrit :
> >>
> >>> One of the cool things with binaries is that there is no info in
> the
> >> binary saying how it was created so I can do lots of fun things
> when I
> >> pull it apart.
> >>>
> >>> Robert
> >>
> >> While it may be cool, I think the compiler should issue a warning
> when
> >> an impossible pattern is encountered. 1234 is obviously not
> >> representable with only 8 bits.
> >
> > The coolness was not an impossible pattern, I agree that the
> compiler should warn, but more the fact that you can pull apart a
> binary differently from how it was constructed. It is with that you
> can do cool things.
> >
> > Robert
>
> That certainly looks impossible to me, how can you match <<1234>>? You
> make it sound like if you know the underlying binary representation
> you can match it.
Quite the opposite. <<1234>> is definitely as impossible pattern, and constructor for that matter, as the default in a binary without any type or size specifier is an 8-bit integer. And 1234 is not an 8-bit integer. I think the system *should* complain.
What I meant is that you can do things like:
<<Sign:1,Exponent:11,Significand:52>> = << 1.234:64/float >>
(with reservation for the order) where you pull apart a 64-bit floating point number into its components. You construct a binary with a floating-point number and pull it apart into three integers. That is cool.
Robert
More information about the erlang-questions
mailing list