我在Erlang中将十进制转换为二进制表示时遇到问题。代码不是针对特定的十进制数,但应该是我们要转换的所有十进制数。但我试图以相反的顺序打印二进制值。例如,二进制值10 = [1,0,1,0]但我希望它应该打印[0,1,0,1]。
请提出任何建议!
答案 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))]).
希望这有助于回答这个问题。