这里我抓住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
以便它是可读文本?
答案 0 :(得分:1)
要获得与第一个代码段相同的行为,您需要将chunk_type
视为binary
。
替换
chunk_type :: size(32),
与
chunk_type :: binary-size(4),
(4
因为binary
需要字节大小而不是位。)