我试图找到列表的长度..但不是列表本身,而是列表中的值的长度..
我采取类似的方式:
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
答案 0 :(得分:2)
iolist_size/1
正是您要找的。 p>
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>>