# Binary matching

Carsten Schultz <>
Mon Dec 20 16:24:29 CET 2004

```Hi!

On Mon, Dec 20, 2004 at 12:39:03PM -0200,
Inswitch Solutions - Erlang Evaluation wrote:
>
> Does someone know why the following binary matching fails?
>  <<X:7/binary, Rest/binary>> = <<0>>
>
> Is there an elegant way to group an octect binary in seven bits values?
> For example eight characters (1 character = 1 byte) in seven octects.

I think you have to align the Rest on a byte boundary yourself.  For
example the following code is working:

base64encode(B) ->
base64encode(B, []).
base64encode(<<A:6,B:6,C:6,D:6,T/binary>>, Acc) ->
% 3+ bytes
base64encode(T, [b64e(D),b64e(C),b64e(B),b64e(A)|Acc]);
base64encode(<<A:6,B:6,C:4>>, Acc) ->
% 2 bytes
lists:reverse([\$=,b64e(C bsl 2),b64e(B),b64e(A)|Acc]);
base64encode(<<A:6,B:2>>, Acc) ->
% 1 byte
lists:reverse([\$=,\$=,b64e(B bsl 4), b64e(A)|Acc]);
base64encode(<<>>, Acc) ->
% 0 bytes
lists:reverse(Acc).

b64e(X) when X >= 0, X < 26 ->
X + \$A;
b64e(X) when X >= 26, X < 52 ->
X - 26 + \$a;
b64e(X) when X >= 52, X < 62 ->
X - 52 + \$0;
b64e(62) ->
\$+;
b64e(63) ->
\$/.

HTH

Carsten

--
Carsten Schultz (2:38, 33:47), FB Mathematik, FU Berlin
http://carsten.codimi.de/
PGP/GPG key on the pgp.net key servers,