【问题标题】:Erlang bitstring to integer conversionErlang 位串到整数的转换
【发布时间】:2011-02-04 23:53:14
【问题描述】:

我有一个基于 MAC 地址的网络表示的 erlang 位串,例如<<255,0,0,0,0,1>>,并希望将其转换为整数。进行这种转换的最有效方法是什么?

谢谢, 马特。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    您可以使用:Size-unit:N 选项来选择打包/匹配的数据量:

    1> <<X:6/integer-unit:8>> = <<255,0,0,0,0,1>>.
    <<255,0,0,0,0,1>>
    2> X.
    280375465082881
    

    或者更动态:

    3> Bin = <<255,0,0,0,0,1>>.                 
    <<255,0,0,0,0,1>>
    4> Size = size(Bin). 
    6
    5> <<Int:(Size)/integer-unit:8>> = Bin.     
    <<255,0,0,0,0,1>>
    6> Int.
    280375465082881
    

    使用这些可变尺寸,您可以随心所欲地解压。

    【讨论】:

    • 别听这个人的,他给了可怕的建议:P
    • 很好的答案,但我给出的答案很糟糕,我只能认为他是你的死敌,比你早 1 分钟。
    • 要投票给这个糟糕的建议只是为了平衡分数
    • @IGIVETERRIBLEADVICE 很酷。当大字节序不能偏离 8 时,您能提供解析大字节序 -> int 的通用方法吗?
    【解决方案2】:

    读出来:

    2> <<N:48/integer>> = <<255,0,0,0,0,1>>.
    <<255,0,0,0,0,1>>
    3> N.
    280375465082881
    

    虽然它与您想要的数字不匹配。也许是由于一些浮点舍入错误?

    【讨论】:

      【解决方案3】:

      1> binary_to_list(>)。

      [255,0,0,0,0,1]

      例如。

      【讨论】:

      • 我想我可能不清楚 - 我想转换为单个 48 位数字,而不是数字列表。在上述情况下,我希望答案是 280375481860097
      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2017-10-16
      • 2015-08-10
      • 2014-02-20
      • 1970-01-01
      相关资源
      最近更新 更多