如何通过变量指定位串的类型

时间:2010-01-17 14:58:53

标签: erlang

Erlang不允许我这样做:

Type = bitstring. 
<<FirstPart:8/Type, Rest/bitstring>> = some_binary.

虽然它让我这样做:

Size = 8. 
<<FirstPart:Size/bitstring, Rest/bitstring>> = some_binary.

所以,在位字符串表达式中,虽然我可以通过变量传递大小,但它不允许我通过变量传递类型。有没有解决方案?

2 个答案:

答案 0 :(得分:3)

您可以使用案例陈述作为解决方法:

{FirstPart, Rest} = case Type of
                        {'bitstring', Len} ->
                            <<A:Len/bitstring, B/bitstring>> = Bin,
                            {A,B};
                        'integer' ->
                            <<A/integer, B/bitstring>> = Bin,
                            {A,B};
                        ...

答案 1 :(得分:0)

我在这里看不到任何特别的东西会导致处理不同“类型”编码的条件不便。

case StringType of
  byte_len ->
    <<Len:8, String:Len/binary>> = SomeBinary,
    String;
  word_len ->
    <<Len:32, String:Len/binary>> = SomeBinary,
    String;
  etc -> ...
end