Bit syntax endianness confusion
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?
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 ;-)
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 333 bytes
Desc: Card for Tony Rogvall
More information about the erlang-questions