Elixir 从phoenix视图呈现位字符串
我有一个格式为Elixir 从phoenix视图呈现位字符串,elixir,rendering,phoenix-framework,bit,bitstring,Elixir,Rendering,Phoenix Framework,Bit,Bitstring,我有一个格式为bitstring=的位字符串。我想渲染,但毒药或Jason似乎没有渲染。以这种方式呈现位字符串的最佳方式是什么 像这样的 bits = <<18::6,8::4,2::5,16::5,18::6,3000::16,0::4>> render(conn, "bits.json", bits: bits) 位= 渲染(conn,“bits.json”,bits:bits) 无法将46位转换为字节数组。另外,这里有两个最自然的选择 可以将数组与值的二进制表示形
bitstring=
的位字符串。我想渲染,但毒药或Jason似乎没有渲染。以这种方式呈现位字符串的最佳方式是什么
像这样的
bits = <<18::6,8::4,2::5,16::5,18::6,3000::16,0::4>>
render(conn, "bits.json", bits: bits)
位=
渲染(conn,“bits.json”,bits:bits)
无法将46
位转换为字节数组。另外,这里有两个最自然的选择
可以将数组与值的二进制表示形式一起使用:
for,do:c
#⇒ [0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
# 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
或者可以将二进制文件与上面的连接使用:
(for,do:c)
|>Enum.join()
#⇒ "0100101000000101000001001000001011101110000000"
如果目标是对位字符串进行编码,然后再对其进行解码,并且需要考虑存储的效率,那么我会使用term_to_binary
将位字符串转换为二进制,然后将其编码为base-64字符串。这将为您提供一个很好的紧凑的位字符串表示,稍后可以对其进行解码
defmodule A do
def encode(bitstring) when is_bitstring(bitstring) do
bitstring |> :erlang.term_to_binary() |> Base.encode64
end
def decode(binary) do
decoded = binary |> Base.decode64!() |> :erlang.binary_to_term([:safe])
if is_bitstring(decoded), do: decoded, else: nil
end
end
IO.inspect encoded = A.encode(<<0::220>>)
IO.inspect A.decode(encoded)
defado模块
def encode(位字符串)何时开始
位字符串|>:erlang.term_to_binary()|>Base.encode64
结束
def解码(二进制)do
decoded=binary |>Base.decode64!()|>:erlang.binary_to_term([:safe])
如果是_位字符串(已解码),则do:decoded,否则:nil
结束
结束
IO.inspect encoded=A.encode()
IO.inspect A.解码(编码)
输出:
"g00AAAAcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
<<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0::size(4)>>
“G00aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=”
您可以将A.encode
的输出传递给JSON编码器,并在使用JSON解码器解码后调用A.decode
。渲染是什么意思?JSON没有二进制数据类型。您期望的JSON值是多少?所以我需要转换为有效的位字符串?如何将其转换为有效的双字符串,以便再次将其解析为二进制文件?您希望得到什么JSON值?字节数组?或者Base64编码字符串?字节数组实际上46
位不能打包到字节数组中。这个答案很完美