我正在尝试将位串解码为十进制值。例如,我有这些位串
<<96,64,112,153,9:4>>。我想将它们转换为十进制值,就像您将四位作为一个数字 (96(01100000) --> 60( 前四位是 6,接下来的四位是 0) , 64 --> 40 等等。输出将是 604070999。最后的 9:4 表示您认为 4 位来表示。
任何人都可以帮助执行此功能erlang。
如果您有二进制而不是位串(即,没有尾随9:4
部分),您可以对二进制理解中的每个字节应用十六进制转换,然后将生成的二进制转换为整数:
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
调用,而是可以通过添加字符$0
的文字将每个 4 位数字转换为其对应的字符0
:
5> binary_to_integer(<< <<($0+B)>> || <<B:4>> <= Bits >>).
604070999