lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Mon, Jul 15, 2013, at 09:58 PM, Luiz Henrique de Figueiredo wrote:
> > 64-bit IEEE floating point:
> > <<Sign:1,Exponent:11,Mantissa:52>>
> > 
> > IP datagram:
> > <<?IP_VERSION:4, HLen:4, SrvcType:8, TotLen:16, 
> >       ID:16, Flgs:3, FragOff:13,
> >       TTL:8, Proto:8, HdrChkSum:16,
> >       SrcIP:32, DestIP:32, RestDgram/binary>>
> 
> Given these strings it easy to parse them into a Lua table containing the
> names and starting and end points of the bitfields described there. That
> table can then be used to set index and newindex metamethods for get and
> put the bitfields using Lua syntax, or perhaps pack and unpack functions:
> 
> template = "<<Sign:1,Exponent:11,Mantissa:52>>"
> name = "64-bit IEEE floating point"
> b = bitfelds.parse(name,template)
> s = io.read(file,b.size)
> t = b:unpack(s)
> print(t.Sign,t.Exponent,t.Mantissa)
> t.Exponent=0
> s = b:pack(t)
> 

Erlang's bit syntax is a joy to work with and I miss it every time I use
another programming language to decode protocols.
In particular, I like the inline binding to variables as opposed to the
regex/scanf like approach taken by other languages.

An efficient analogue (to Erlang's bit syntax) in Lua would be
tremendously useful.

Lua tables would work great for something like this.  :)

/todd