ruby上有一个适用于压缩数组的应用程序:
2.3.1 :001 > [3340546, 3340547].pack("L*")
=> "\x02\xF92\x00\x03\xF92\x00"
2.3.1 :002 > "\x02\xF92\x00\x03\xF92\x00".unpack("L*")
=> [3340546, 3340547]
是否可以选择在Elixir上为数组制作包?
是!在Elixir中,我们使用二进制模式匹配来实现这一目标。 Ruby的pack / unpack中的L
是一个32位无符号小端整数。以下是你在Elixir中进行这两项操作的方法:
包:
iex(1)> <<3340546::32-little, 3340547::32-little>>
<<2, 249, 50, 0, 3, 249, 50, 0>>
解压:
iex(2)> <<a::32-little, b::32-little>> = "\x02\xF92\x00\x03\xF92\x00"
<<2, 249, 50, 0, 3, 249, 50, 0>>
iex(3)> a
3340546
iex(4)> b
3340547
您还可以打包/解包任意数量的值列表,如下所示:
iex(5)> Enum.map_join([3340546, 3340547], fn x -> <<x::32-little>> end)
<<2, 249, 50, 0, 3, 249, 50, 0>>
iex(6)> for <<x::32-little <- "\x02\xF92\x00\x03\xF92\x00">>, do: x
[3340546, 3340547]