我正在尝试将bitstring解码为十进制值。对于e.x,我有这种位串
<< 96,64,112,153,9:4>取代。我想将它们转换为十进制值,就像你将四位作为一个数字(96(01100000) - > 60(前四位是6,接下来的四位是0),64 - > 40等等。输出将是604070999.最后9:4表示您考虑使用4位来表示。
任何人都可以帮助完成这个功能erlang。
答案 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