代码之家  ›  专栏  ›  技术社区  ›  Paralife

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

  •  2
  • Paralife  · 技术社区  · 16 年前

    Erlang不让我这么做:

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

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

    因此,在位字符串表达式中,虽然我可以通过变量传递大小,但它不允许我通过变量传递类型。有什么解决办法吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Zed    16 年前

    {FirstPart, Rest} = case Type of
                            {'bitstring', Len} ->
                                <<A:Len/bitstring, B/bitstring>> = Bin,
                                {A,B};
                            'integer' ->
                                <<A/integer, B/bitstring>> = Bin,
                                {A,B};
                            ...
    
        2
  •  0
  •   Christian    16 年前

    我看不出有什么特别的地方会给处理不同的“类型”编码带来条件上的不便。

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