Преобразование десятичного в двоичное представление

#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 . В документации есть несколько других подобных операторов