将十进制转换为二进制表示

时间:2016-10-17 23:47:27

标签: erlang

我在Erlang中将十进制转换为二进制表示时遇到问题。代码不是针对特定的十进制数,但应该是我们要转换的所有十进制数。但我试图以相反的顺序打印二进制值。例如,二进制值10 = [1,0,1,0]但我希望它应该打印[0,1,0,1]。

请提出任何建议!

2 个答案:

答案 0 :(得分:3)

您可以将数字转换为二进制数,将二进制数转换为位列表,删除所有前导零位,然后反转结果:

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)

所以我不太确定你遇到麻烦的部分。这是一个可能有所帮助的解决方案。

将数字转换为二进制数:

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))]).

希望这有助于回答这个问题。