[erlang-questions] Padding a binary to a multiple of 4 bytes

Richard O'Keefe ok@REDACTED
Mon Dec 22 03:47:51 CET 2008


On 21 Dec 2008, at 2:03 am, Camille Troillard wrote:

> Hi !
>
> I am new to Erlang, and would like to ask experienced users some  
> advices on best practices I should adopt.
>
> Right now, I would like to know what is the best way of padding a  
> binary to a multiple of 4 bytes.
> I have written a function like this:
>
> pad_to4 (Bin) ->
>     case (size(Bin) rem 4) of
> 	0 -> Bin;
> 	Pad -> <<Bin/binary, 0:((4-Pad)*8)>>
>     end.
>
> I don't find it very elegant,

I don't either, because of the excess parentheses around
"size(Bin) rem 4", and because "Pad" is *not* the amount
of padding required, but the amount of padding NOT required.
Also, "to4" is rather ugly.  Treat "4" as a word here.

How about
	pad_to_4(Binary) ->
	    case (4 - size(Binary) rem 4) rem 4
	      of 0 -> Binary
	       ; N -> <<Binary/binary, 0:(N*8)>>
	    end.

Tested, works, doesn't copy unless it has to.




More information about the erlang-questions mailing list