문자 재 인코딩은 일반적으로 수신 시스템에서 처리 할 수 없을 때 수행됩니다. 예를 들어, BASE64는 더 긴 데이터 시퀀스를 나타 내기 위해 6 비트 (2 6 , 따라서 64)의 문자를 사용하여 데이터를 나타냅니다 (종종에 나타나는 "=="가 정렬을 위해 채워짐). 전자 메일의 그림 파일에 0xFE가있을 수 있고 메일 서버가 전송하는 데 불만이있을 수 있습니다 (또는 일반적으로 인쇄되지 않는 다른 문자).
"크기를 줄이는"인코딩은 없습니다. 인코딩은 비트를 나타내는 문자에 대한 매핑입니다. 즉, ASCII는 종종 8 비트 공간에 저장되는 7 비트 문자 세트 (인코딩)입니다. 허용되는 범위를 제한하면 제어 문자를 제거 할 수도 있습니다.
이 방법을 사용하면 비트 수준에서 내용을 작성해야하며 모든 최신 기계에는 8 비트의 배수 인 정렬이 있기 때문에 기계 속도 및 명령으로 약간의 지옥을 재생합니다. 예를 들어 유니 코드가 UTF-8, UTF-16 및 UTF-32 인 이유입니다.
보안을 위해이 작업을 수행하는 경우 (그렇기 때문에 Security.SE에 게시 했습니까?), 항목을 필터링하고 정상적으로 저장하십시오. 공간을 절약하기 위해이 작업을 수행하는 경우 모든 추가 코드와 느린 액세스 시간 (대부분의 항목이 주소 경계를 넘기 때문에)이 공간을 절약 할 가치가 있는지 고려하십시오.
by 다음은 ASCII를 8 비트 스토리지에서 7 비트로 변환해야하는 CS 과정의 스 니펫입니다.
memset(dest,0x00,8);
memcpy(dest, source, length);
for (int i = 0; i < 8; i++) {
if (dest[i] & 0x80) {
fprintf(stderr, "%s: %s\n", dest, "Illegal byte sequence");
exit(EILSEQ);
}
}
dest[0] = 0x7F & dest[0] | 0x80 & dest[1] << 7;
dest[1] = 0x3F & dest[1] >> 1 | 0xC0 & dest[2] << 6;
dest[2] = 0x1F & dest[2] >> 2 | 0xE0 & dest[3] << 5;
dest[3] = 0x0F & dest[3] >> 3 | 0xF0 & dest[4] << 4;
dest[4] = 0x07 & dest[4] >> 4 | 0xF8 & dest[5] << 3;
dest[5] = 0x03 & dest[5] >> 5 | 0xFC & dest[6] << 2;
dest[6] = 0x01 & dest[6] >> 6 | 0xFE & dest[7] << 1;
dest[7] = 0x00; //Clearing out