erlang中二进制提取字符串有哪些快捷的方式?


flash writeUTF向erlang发送一个字符串,解包后提取字符串方法如下:

   
  %%读取字符串
  
read_string(Bin) ->
case Bin of
<<Len:16, Bin1/binary>> ->
case Bin1 of
<<Str:Len/binary-unit:8, Rest/binary>> ->
{binary_to_list(Str), Rest};
_R1 ->
{[], <<>>}
end;
_R1 ->
{[], <<>>}
end.

需要执行两次比特语法,一次取出字符串字节长度,第二次取出实际数据,然后再binary_to_list,这样效率貌似比较有问题,有木有更好的方法?

erlang

一切皆归于无 12 years, 12 months ago

当然你也可以写成:

   
  %%读取字符串
  
read_string(Bin) ->
case Bin of
<<Len:16, Str:Len/binary-unit:8,Rest/binary>> ->
{binary_to_list(Str), Rest};
_R1 ->
{[], <<>>}
end;
_R1 ->
{[], <<>>}
end.

不过这样的话,没有你的代码逻辑清晰,其实性能没有多大的区别,重要的是代码的可读性。

谷歌和度娘 answered 12 years, 12 months ago

Your Answer