Skip to content

Instantly share code, notes, and snippets.

@sebastian
Created November 2, 2010 17:35
Show Gist options
  • Save sebastian/659978 to your computer and use it in GitHub Desktop.
Save sebastian/659978 to your computer and use it in GitHub Desktop.
Converts a bitstring into a number
-spec(bitstring_to_number/1::(BitString::bitstring()) -> number()).
bitstring_to_number(BitString) ->
bitstring_to_number(BitString, bit_size(BitString), 0).
bitstring_to_number(_BitString, 0, Acc) -> Acc;
bitstring_to_number(BitString, CurrBitNum, Acc) ->
BitsToSkip = bit_size(BitString) - CurrBitNum,
<<_:BitsToSkip/bitstring, CurrentBit:1/bitstring, _/bitstring>> = BitString,
Addition = case CurrentBit of
<<1:1>> -> 1 bsl (CurrBitNum - 1);
_ -> 0
end,
bitstring_to_number(BitString, CurrBitNum - 1, Acc + Addition).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment