我如何能够通过可变

问题描述:

二郎指定位串的类型没有让我做:我如何能够通过可变

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

虽然它让我做的事:

​​

所以,在比特字符串表达式,而我可以通过一个变量传递大小,它不让我通过一个变量传递类型。有没有解决方法?

+1

第500个问题标签“二郎”:O) – Zed 2010-01-17 17:05:06

您可以使用一个case语句作为一种解决方法:

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

这对我的作品,我已经做了这个样子。我只是想知道为什么他们没有可能使用类型的var ... – Paralife 2010-01-17 18:30:38

+2

我的_guess_是在编译时将二进制表达式编译为内部函数。 – Zed 2010-01-17 18:45:47

+1

是正确的,二进制表达式编译,没有类型会让它变慢。 – rvirding 2010-01-17 22:46:07

我没有在这里看到任何不寻常的东西,这使得处理不同“编码类型”的条件不便。

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