2017-02-28 1 views
0

내 자신의 PNG 라이브러리 용으로 자체 Inflater를 구현하려고합니다. (알아 두어야 할 것은, idc를 바꿔서는 안됩니다.)zlib/RFC1950의 FCHECK는 어떻게 작동합니까?

저는 정말 어떻게 작동하는지 이해하는 데 어려움을 겪고 있습니다. 분명히 그것은 31의 배수가되어야합니다 (5 비트에서, 그래서 항상 31?). 가장 중요한 비트부터 가장 중요한 비트까지 읽어야합니다. 이전에 보았던 다른 모든 포맷과 반대입니다. , 그것은 약간의 혼란을 가져오고있다.

Zlib 소스 코드를 읽으려고했으나 기본적으로 읽을 수 없었으며 RFC는 "check code"에 대해 구체적이지 않습니다 (분명히 zlib 헤더의 두 번째 바이트의 5 개 유효 비트입니다). , 또는 iDAT/fDAT 척 데이터 섹션의 두 번째 바이트).

제 질문은; 어떻게 읽습니까? 어떻게 검증합니까? 어떻게해야합니까?

편집 : 체크 코드도 RFC에 fcheck가 호출 될 1950

답변

1

RFC 1950 헤더를 확인하는 방법을 정확하고 간결하게 말한다. MSB의 순서대로 저장 16 비트의 부호없는 정수로 보면 CMF와 FLG는, (CMF는 * 256 + FLG) 31

의 배수임을

fcheck가 값은 있어야

CMF는 스트림의 첫 번째 바이트이고 FLG는 두 번째 바이트입니다. 그럼 내가 뭐라고 할 수 있니? 첫 번째 바이트를 가져 와서 256을 곱하고 두 번째 바이트를 추가하십시오. 그 수가 31의 배수가 아니면 헤더가 유효하지 않습니다.

숫자가 31로 나눌 수 있는지 확인하는 방법을 모르십니까?

+0

그래서 2 바이트 블록의 값을 취하여 5 비트 섹션을 생성하고이를 31의 배수로 만들기 위해 전체 2 바이트 블록을 31으로 모듈화합니다 . 지금 감사합니다. – MarcusJ

관련 문제