【问题标题】:Conversion of bitstring to decimal in Erlang在 Erlang 中将位串转换为十进制
【发布时间】:2015-10-07 02:03:39
【问题描述】:

我正在尝试将位串解码为十进制值。例如,我有这些位串

>。我想将它们转换为十进制值,就像您将四位作为数字 (96(01100000) --> 60( 前四位是 6,接下来的四位是 0) , 64 --> 40 等等。输出将是 604070999。最后的 9:4 表示您认为 4 位来表示。

谁能帮忙做这个函数erlang。

【问题讨论】:

    标签: erlang bitstring


    【解决方案1】:

    如果您有二进制而不是位串(即,没有尾随 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 在 cmets 中指出的那样,对于位串,您根本不需要 integer_to_binary/2 调用,而是可以通过添加 @987654325 将每个 4 位数字转换为其对应的字符@,字符0的文字:

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

    【讨论】:

    • 如果您正在使用binary_to_integer/1,则没有理由使用integer_to_binary(B, 16)binary_to_integer(&lt;&lt; &lt;&lt;($0+B)&gt;&gt; || &lt;&lt;B:4&gt;&gt; &lt;= Bin &gt;&gt;) 就足够了。
    • @Hynek-Pichi-Vychodil 是的;我首先尝试处理二进制而不是位串,因此使用&lt;&lt;B:8&gt;&gt; 而不是&lt;&lt;B:4&gt;&gt;,在这种情况下需要integer_to_binary/2。如果您愿意,我会很乐意编辑和扩展答案。
    • @SteveVinoski:我会很荣幸 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多