【问题标题】:How do I get binary byte length in Erlang?如何在 Erlang 中获取二进制字节长度?
【发布时间】:2011-08-07 16:04:37
【问题描述】:

如果我有以下二进制文件:

<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>

我怎么知道它的长度?

【问题讨论】:

    标签: binary erlang byte packet


    【解决方案1】:

    对于字节大小:

    1> byte_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
    16
    

    对于位大小:

    2> bit_size(<<32,16,10,9,108,111,99,97,108,104,111,115,116,16,170,31>>).
    128
    

    当您有一个位串(位长不能被字节大小 8 整除的二进制文件)时,byte_size/1 将四舍五入到最接近的整个字节。 IE。位串适合的字节数:

    3> bit_size(<<0:19>>).
    19
    
    4> byte_size(<<0:19>>). % 19 bits fits inside 3 bytes
    3
    
    5> bit_size(<<0:24>>).
    24
    
    6> byte_size(<<0:24>>). % 24 bits is exactly 3 bytes
    3
    
    7> byte_size(<<0:25>>). % 25 bits only fits inside 4 bytes
    4
    

    这是一个示例,说明从 8 位(适合 1 个字节)到 17 位(需要 3 个字节才能适合)的大小差异:

    8> [{bit_size(<<0:N>>), byte_size(<<0:N>>)} || N <- lists:seq(8,17)].
    [{8,1},
     {9,2},
     {10,2},
     {11,2},
     {12,2},
     {13,2},
     {14,2},
     {15,2},
     {16,2},
     {17,3}]
    

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 1970-01-01
      • 2017-08-05
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多