Конвертирую десятичное число в двоичный формат:
A = integer_to_list(5, 2).
И добавляю к полученному списку список из нулей:
A ++ [0, 0, 0, 0, 0].
Получаю [49, 48, 49, 0, 0, 0, 0, 0].
Нужно при объединении получить [1, 0, 1, 0, 0, 0, 0, 0].
Немного более вменяемый способ:
i2bl(I) when is_integer(I) ->
i2bl(<<I>>, []).
i2bl(<<>>, Acc) ->
Acc;
i2bl(<<B:1, Rest/bitstring>>, Acc) ->
i2bl(Rest, [B|Acc]).
Пример использования:
1> i2bl(5).
[1,0,1,0,0,0,0,0]
Дело в том, что у вас получается список символов "101", а не чисел. Символы имеют числовое представление, согласно таблице ASCII, и символу 0 соответствует код 48, а символу 1, соответственно, 49.
Попробуйте вычесть код цифры 0 из каждого элемента массива, получаемого после вызова функции integer_to_list(5, 2).
Это можно сделать, например, так:
A = lists:map(fun(X) -> X-$0 end, integer_to_list(5, 2)).