Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 从phoenix视图呈现位字符串_Elixir_Rendering_Phoenix Framework_Bit_Bitstring - Fatal编程技术网

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
位不能打包到字节数组中。这个答案很完美