ERlang - 试图找到List的成分长度

时间:2010-08-13 07:55:47

标签: erlang

猜猜它迟到了,我是初学者,只需要一些帮助..

我试图找到列表的长度..但不是列表本身,而是列表中的值的长度..

我采取类似的方式:

   Other = [<<"366">>,0,
             <<1>>,
             <<"344">>,<<"Really"
             <<1>>,
             <<"989">>,<<"NotReally">>
             <<1>>,
             <<"345">>,4,
             <<1>>,
             <<"155">>,"209.191"]

我真的想先将Other转换为RAW成分二进制文件

示例:

Other = [<<3>>,<<4>>,<<7>>,<<56>>,<<45>>,<<56>>...]

当然,这是原始的其他方式的示例(不正确的转换值)。因此,那里的所有值都有最基本的二进制数据。

然后我可以简单地迭代计算每个&lt;&lt; _&gt;&gt;并确定总消息长度。

希望我能够找到解决方案。

感谢大家的帮助,GN

2 个答案:

答案 0 :(得分:2)

iolist_size/1正是您要找的。

1> iolist_size([<<"366">>,0,<<1>>,<<"344">>,<<"Really">>,<<1>>,<<"989">>,<<"NotReally">>,<<1>>,<<"345">>,4,<<1>>,<<"155">>,"209.191"]).                 
43
2> v(1) - 1.
42

P.S。:为什么你的示例数据有这个剩余字符? ; - )

答案 1 :(得分:1)

如果您要做的就是找到整个结构的长度,我会尝试这样的事情:

my_length(X) when is_integer(X) -> 1;
my_length(X) when is_binary(X) -> erlang:size(X);
my_length(Lst) when is_list(Lst) ->
    lists:sum([my_length(X) || X <- Lst]).

如果你真的想构建你的结构的平面版本,那么erlang:list_to_binary让你非常接近你需要的东西,然后只是调用它的大小。 (实际上,这可能比我的第一次尝试更好。)

1> erlang:list_to_binary([<<"366">>,0,<<"155">>,"209.191"]).
<<51,54,54,0,49,53,53,50,48,57,46,49,57,49>>