Erlang不允许我这样做:
Type = bitstring.
<<FirstPart:8/Type, Rest/bitstring>> = some_binary.
虽然它让我这样做:
Size = 8.
<<FirstPart:Size/bitstring, Rest/bitstring>> = some_binary.
所以,在位字符串表达式中,虽然我可以通过变量传递大小,但它不允许我通过变量传递类型。有没有解决方案?
答案 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