2010-01-17 62 views
2

二郎指定位串的類型沒有讓我做:我如何能夠通過可變

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

雖然它讓我做的事:

​​

所以,在比特字符串表達式,而我可以通過一個變量傳遞大小,它不讓我通過一個變量傳遞類型。有沒有解決方法?

+1

第500個問題標籤「二郎」:O) – Zed 2010-01-17 17:05:06

回答

3

您可以使用一個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

0

我沒有在這裏看到任何不尋常的東西,這使得處理不同「編碼類型」的條件不便。

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