베이스 64는 마지막에 0을 사용하여 이진 데이터를 처리하는 방법

StackOverflow https://stackoverflow.com/questions/246548

  •  05-07-2019
  •  | 
  •  

문제

사양을 이해하면 Base64 인코더

a) 소스 바이너리를 가져다가 0을 24 바이트 길이로 옮깁니다.

b) 그런 다음 한 번에 6 비트 씩 64 자 (a..z, a..z, 0..9, +, -)의 대상 세트로 트랜스 코딩합니다. 마지막 두 바이트 (16 비트)가 제로 패딩 된 것을 발견하면 마지막 두 문자는 '=='로 트랜스 코딩됩니다. 마지막 1 바이트 (8 비트)가 제로 패딩 된 것을 발견하면 마지막 문자는 '='로 트랜스 코딩됩니다.

내 질문은 (B) 단계에서, 마지막 바이트가 패딩 되었기 때문에 마지막 바이트가 0이라는 것을 어떻게 알 수 있습니까?

부품 (b)를 담당하는 서브 시스템이 부품 (a) 동안 무슨 일이 있었는지 알아야 하는가?

도움이 되었습니까?

해결책

인코더 (디코더와 달리)는 입력 데이터의 길이를 알고 끝에서 "="또는 "=="를 출력할지 여부를 파악할 수 있습니다. 귀하의 질문은 언급 한 두 단계 사이에 연결이 없다고 가정하지만 제가 본 구현에서는 사실이 아닙니다.

내가해야 할 구현 쓰다 입력 스트림에서 한 번에 하나씩 6 비트 그룹을 추출하는 루틴이 있었기 때문에 첫 번째 단계를 전혀 수행하지 않았습니다. 그런 다음 결국 표현 "byteCount%3"출력 스트림에 추가 할 스트링을 결정하는 데 사용되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top