在erlang中经常要把一些数据打包为二进制,但是问题就在于这些数据中会不同的要求,例如[ 姓名:32/big-integer-unsigned, 年龄:16/big-integer-unsigned,
性别:8/big-integer-unsigned]
当遇到这种情况下我们应该如何做呢?下面是我自己的一点见解
首先可以将这些数据用元组列表的形式保存起来并把数据要求的类型加入 如:
Lists=[{?int32u,Name},{?int16u,Age},{?int8,Sex}],
接着:
encode([],Bin) -> Bin;
encode([{Type,Val}|Lists],Bin) ->
encode(Lists,encode_val(Type,Val,Bin)).
encode_val(?int32u,Val,Bin)->
<<Val:32/big-integer-unsigned,Bin/binary>>;
encode_val(?int16u,Val,Bin)->
<<Val:16/big-integer-unsigned,Bin/binary>>;
encode_val(?int8u,Val,Bin)->
<<Val:8/big-integer-unsigned,Bin/binary>>;
.....
如果数据类型有很多,那么在写encode_val的过程很麻烦,但试想下当你把所需的类型
都预先写好了,后面的就只需要你调用encode这个函数就可以一一帮你转换为你所需要的
数据包了,这就算是痛苦一时但幸福一生哦!!
|