如何将PNG chunk_type打印为文本?

时间:2016-07-08 15:51:38

标签: elixir

这里我抓住4个8位部分的chunk_type,然后打印二进制文件。但我宁愿在一个32位的部分中抓住它。

  defp read_chunks(<<>>), do: IO.puts "Done"
  defp read_chunks(<<
                  length :: size(32),
                  chunk_type1 :: size(8),
                  chunk_type2 :: size(8),
                  chunk_type3 :: size(8),
                  chunk_type4 :: size(8),
                  chunk_data :: binary - size(length),
                  _crc :: size(32),
                  chunks :: binary
                  >>) do
    IO.inspect <<chunk_type1,chunk_type2,chunk_type3,chunk_type4>>
    read_chunks(chunks)
  end

喜欢这个

  defp read_chunks(<<>>), do: IO.puts "Done"
  defp read_chunks(<<
                  length :: size(32),
                  chunk_type :: size(32),
                  chunk_data :: binary - size(length),
                  _crc :: size(32),
                  chunks :: binary
                  >>) do
    IO.inspect ???
    read_chunks(chunks)
  end

如何在第二个示例中打印chunk_type以便它是可读文本?

1 个答案:

答案 0 :(得分:1)

要获得与第一个代码段相同的行为,您需要将chunk_type视为binary

替换

chunk_type :: size(32),

chunk_type :: binary-size(4),

4因为binary需要字节大小而不是位。)