#erlang
#erlang
Вопрос:
У меня возникла проблема с преобразованием десятичного в двоичное представление в Erlang. Код предназначен не для определенного десятичного числа, но он должен быть для всех десятичных чисел, которые мы хотим преобразовать. Но я пытаюсь напечатать двоичные значения в обратном порядке. например, двоичное значение 10 = [1,0,1,0], но я хочу, чтобы оно печатало [0,1,0,1] .
Любое предложение, пожалуйста!
Ответ №1:
Вы можете преобразовать число в двоичный файл, преобразовать двоичный файл в список битов, удалить все начальные нулевые биты, а затем отменить результат:
1> N = 10.
10
2> lists:reverse(lists:dropwhile(fun(D) -> D =:= 0 end, [X || <<X:1>> <= <<N:64>>])).
[0,1,0,1]
В этом примере число представлено в виде 64-разрядного двоичного файла, но вы можете увеличить его, если ожидаете, что вам придется иметь дело с большими числами. Кроме того, это решение возвращает пустой список для значения 0; чтобы исправить это, просто сопоставьте шаблон и верните [0]
для этого случая. Этот подход показан в виде функциональных предложений ниже:
convert(0) -> [0];
convert(N) ->
lists:reverse(lists:dropwhile(fun(D) -> D =:= 0 end, [X || <<X:1>> <= <<N:64>>])).
Комментарии:
1. Большое вам спасибо, Стив.:)
2. Таким же образом мы можем преобразовать символ в двоичное представление и наоборот и применить операцию xor к битовой строке, чтобы результат был таким: xor([1,1,0,1,0,1], [1,0,1]) = [0, 1, 1, 1, 0, 1].
3. @Guddu: посмотрите эту суть , чтобы увидеть, как вы можете это сделать.
4. Спасибо, Стив, это было очень полезно.
5. Пожалуйста, еще одно одолжение:
Ответ №2:
Так что я не совсем уверен, с какой частью у вас возникли проблемы. Вот решение, которое может помочь.
Для преобразования числа в двоичное:
integer_to_list(123, 2)
Если вы хотите распечатать двоичный:
io:format("~s~n", [integer_to_list(123, 2)]).
Похоже, что это в порядке, обратном тому, что вы хотите. Просто переверните список:
io:format("~s~n", [lists:reverse(integer_to_list(123, 2))]).
Надеюсь, это поможет ответить на вопрос.
Комментарии:
1. Спасибо Andrakis за ответ.
2. @Guddu Я пока не могу ответить на другой ответ, но если вы хотите применить битовые операции xor, вы можете использовать оператор
bxor
Erlang следующим образом :1 bxor 3
. В документации есть несколько других подобных операторов