Bit syntax endianness confusion

Tony Rogvall tony@REDACTED
Mon Dec 4 22:43:00 CET 2000


James Hague wrote:

> Suppose I have a binary that contains a 32-bit word stored in big endian
> (network) order.  This word contains three fields in this order:  10 bits,
> 4 bits, and 18 bits.  Matching this is easy:
>
> <<Field0:10,Field1:4,Field2:18>> = Binary.
>
> Now, suppose this word is stored in little endian order.  How would I match
> it?  This isn't right:
>
> <<Field0:10/little,Field1:4/little,Field2:18/little>> = Binary.
>
> Or is it?  Actually, how would the following be interpeted:
>
> <<Field0:10/little,Field1:4,Field2:18/little>> = Binary.
>
> where the first and last fields are little endian but the middle one isn't?
>  I get the impression that the "little" qualifier reverses bitfields, but I
> need something higher level than that.  I want to be able to say that the
> entire word is stored in little endian order.
>
> Do I need to do some swizzling first, by interpreting the binary as four
> bytes, creating a new binary with the bytes reversed, and then matching
> against the original pattern?
>
> James

This "problem" was addressed by us (klacke and me) in the original proposal of
the Bit syntax.
The source of such bit combinations mostly arise from C language bit fields.

Our solution was to have sub group bit syntax expression. Then you could solve
your problem by
writing something like:

    <<  <<Field0:10, Field1:4, Field2:18>> : 4/little  >>

Expression like yours above does not make much sense (Field1:4/little) since
only byte sequences are
affected by the endian order.

I am sure the OTP team will extend the bit syntax with a lot of nice features
in the future ;-)

/Tony

-------------- next part --------------
A non-text attachment was scrubbed...
Name: tony.vcf
Type: text/x-vcard
Size: 333 bytes
Desc: Card for Tony Rogvall
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20001204/c649c867/attachment.vcf>


More information about the erlang-questions mailing list