Parsing null terminated strings in a binary.

Mats Cronqvist mats.cronqvist@REDACTED
Thu Jan 13 14:24:32 CET 2005


   i don't get the last two matches. i'd think this would work;

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

   what am i missing?

   mats

Raimo Niskanen wrote:
> ... 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
> 
> 



More information about the erlang-questions mailing list