2016-07-08 8 views
0

Hier nehme ich den chunk_type in 4 8bit Teile und drucke dann die Binärdatei. Aber ich würde es bevorzugen, es in einem 32-Bit-Teil zu greifen.Wie PNG chunk_type als Text drucken?

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 

Gefallen Sie diese

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 

Wie kann ich chunk_type im zweiten Beispiel auszudrucken, so dass es lesbarer Text ist?

Antwort

1

Um das gleiche Verhalten wie das erste Snippet zu erhalten, müssen Sie chunk_type als binary lesen.

ersetzen

chunk_type :: size(32), 

mit

chunk_type :: binary-size(4), 

(4 weil binary die Größe in Bytes erfordert, nicht Bits.)

+0

Wenn ich das tun, wird das Muster nicht mehr überein . '** (FunctionClauseError) keine Funktionsklausel, die in HideInImage.read_chunks/1 'übereinstimmt – Takkun

+0

Bitte sehen Sie meine Bearbeitung. Dies sollte jetzt funktionieren. – Dogbert

Verwandte Themen