在Erlang中将bitstring转换为十进制

时间:2015-10-06 11:16:38

标签: erlang bitstring

我正在尝试将bitstring解码为十进制值。对于e.x,我有这种位串

<< 96,64,112,153,9:4>取代。我想将它们转换为十进制值,就像你将四位作为一个数字(96(01100000) - > 60(前四位是6,接下来的四位是0),64 - > 40等等。输出将是604070999.最后9:4表示您考虑使用4位来表示。

任何人都可以帮助完成这个功能erlang。

1 个答案:

答案 0 :(得分:3)

如果您有二进制而不是位串(即没有尾部9:4部分),您可以对二进制解析中的每个字节应用十六进制转换,然后将生成的二进制转换为整数: / p>

1> Bin = <<96,64,112,153>>.
<<96,64,112,153>>
2> binary_to_integer(<< <<(integer_to_binary(B,16))/binary>> || <<B:8>> <= Bin >>).
60407099

同样适用于你的位串,一次取4位而不是理解中的8位:

3> Bits = <<96,64,112,153,9:4>>.
<<96,64,112,153,9:4>>
4> binary_to_integer(<< <<(integer_to_binary(B,16))/binary>> || <<B:4>> <= Bits >>).
604070999

但正如@ Hynek-Pichi-Vychodil在评论中指出的那样,对于比特串你根本不需要integer_to_binary/2调用,而是可以将每个4位数字转换为相应的字符通过添加$0,字符0的文字:

5> binary_to_integer(<< <<($0+B)>> || <<B:4>> <= Bits >>).
604070999