베이스 64는 마지막에 0을 사용하여 이진 데이터를 처리하는 방법
문제
사양을 이해하면 Base64 인코더
a) 소스 바이너리를 가져다가 0을 24 바이트 길이로 옮깁니다.
b) 그런 다음 한 번에 6 비트 씩 64 자 (a..z, a..z, 0..9, +, -)의 대상 세트로 트랜스 코딩합니다. 마지막 두 바이트 (16 비트)가 제로 패딩 된 것을 발견하면 마지막 두 문자는 '=='로 트랜스 코딩됩니다. 마지막 1 바이트 (8 비트)가 제로 패딩 된 것을 발견하면 마지막 문자는 '='로 트랜스 코딩됩니다.
내 질문은 (B) 단계에서, 마지막 바이트가 패딩 되었기 때문에 마지막 바이트가 0이라는 것을 어떻게 알 수 있습니까?
부품 (b)를 담당하는 서브 시스템이 부품 (a) 동안 무슨 일이 있었는지 알아야 하는가?
해결책
인코더 (디코더와 달리)는 입력 데이터의 길이를 알고 끝에서 "="또는 "=="를 출력할지 여부를 파악할 수 있습니다. 귀하의 질문은 언급 한 두 단계 사이에 연결이 없다고 가정하지만 제가 본 구현에서는 사실이 아닙니다.
내가해야 할 구현 쓰다 입력 스트림에서 한 번에 하나씩 6 비트 그룹을 추출하는 루틴이 있었기 때문에 첫 번째 단계를 전혀 수행하지 않았습니다. 그런 다음 결국 표현 "byteCount%3
"출력 스트림에 추가 할 스트링을 결정하는 데 사용되었습니다.
제휴하지 않습니다 StackOverflow