Parsing null terminated strings in a binary.

Raimo Niskanen raimo@REDACTED
Thu Jan 13 12:14:35 CET 2005


... and this actually compiles and works:

[code]
z_split(B, N) ->
    case B of
	<<B1:N/binary,0,B2/binary>> ->
	    {B1,B2};
	<<_:N/binary>>=B ->
	    B;
	<<_:N/binary,_/binary>>=B ->
	    z_split(B, N+1)
    end.
[/code]


Eshell V5.4.3  (abort with ^G)
1> t:z_split(<<61,62,63,0,64,65,66>>, 0).
{<<61,62,63>>,
 <<64,65,66>>}
2> t:z_split(<<61,62,63,0,64>>, 0).      
{<<61,62,63>>,
 <<64>>}
3> t:z_split(<<61,62,63,0>>, 0).   
{<<61,62,63>>,
 <<>>}
4> t:z_split(<<61,62,63>>, 0).  
<<61,62,63>>



Raimo Niskanen <raimo@REDACTED> writes:

> Parse the binary in a loop something like this (untested):
> 
> z_split(<<B1:N/binary,0,B2/binary>>, N) ->
>     {B1,B2};
> z_split(<<B1:N/binary>>, N) ->
>     B1;
> z_split(<<_:N/binary,_/binary>>=B, N) ->
>     z_split(B, N+1).
> 
> This will not build any sub-binaries until the zero is found.
> 
> 
> 
> cyberlync@REDACTED (Eric Merritt) writes:
> 
> > Guys,
> > 
> >  I have a need to parse out a series of null terminated fields a
> > binary. The easiest way to do this is to simply traverse the binary
> > using bit syntax until a null byte occurs. However, I believe this
> > would be less then efficient as a new binary would be created for each
> > byte matched. Aside from created a C port to actually do the parsing
> > do any of you have any ideas on how to do this efficiently?
> > 
> > Thanks,
> > Eric
> > -- 
> > I'm a programmer, I don't have to spell correctly; I just have to
> > spell consistently
> 
> -- 
> 
> / Raimo Niskanen, Erlang/OTP, Ericsson AB

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list