aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/architecture des ordinateurs/scripts/bin_to_hex.exs
blob: 8d6e629c921bdde0f79a4e1aa5f1fbbd16d9e98d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
defmodule Conv do
  def bin_to_hex(b) do
	bin_to_hex_rec(b, [])
  end

  defp bin_to_hex_rec(before, aft) when before != "" do
  	{b, a} = String.split_at(before, -4)
	s = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"] 
	bin_to_hex_rec(b, [Enum.at(s, bin_to_dec(a)) | aft])
  end

  defp bin_to_hex_rec("", aft) do
    aft
  end

  def bin_to_dec(b) do
    bin_to_dec_rec(b, 0, 0)
  end

  defp bin_to_dec_rec(before, aft, i) when before != "" do
    {b, a} = String.split_at(before, -1)
    bin_to_dec_rec(b, case a do
      "0" -> aft
      "1" -> aft + Integer.pow(2, i)
    end, i + 1)
  end

  defp bin_to_dec_rec("", aft, _i) do
    aft
  end
end

Conv.bin_to_hex("1111")
|> IO.puts() # must print f

Conv.bin_to_hex("11101011")
|> IO.puts() # must print EB