XXencode 인 코딩,XX 인 코딩 소개,XXencode 인 코딩 변환 원리 와 알고리즘

4368 단어 XXencode부호화
Xxencode 인 코딩 도 바 이 너 리 문 자 를 일반 인쇄 문자 로 변환 하 는 방법 입 니 다.UUencode 인 코딩 원리 방법 과 비슷 하지만 유독 인쇄 가능 한 문자 가 다르다.UUencode 인 코딩 을 통 해 우 리 는 64 개의 인쇄 가능 한 문자 중 많은 특수 문자 가 있다 는 단점 을 알 고 있다.한편,XXencode 인 코딩 방법 은 64 개의 원 문자 에 대해 규범화 되 어 있다.여기 베이스 64 타 입 이 있어 요.인쇄 가능 한 문자 범위 와 번호 가 지정 되 어 있 습 니 다.Xxencode 인 코딩 은 20 세기 후반 에 IBM 대형 컴퓨터 에서 광범 위 하 게 응용 되 었 다.현재 Base 64 인 코딩 변환 방법 으로 대체 되 고 있 습 니 다.
Xxencode 인 코딩 원리
XXencode 는 입력 텍스트 를 세 바이트 단위 로 인 코딩 합 니 다.마지막 에 남 은 자료 가 세 바이트 보다 적 으 면 부족 한 부분 은 0 으로 보완 한다.이 세 개의 바이트 에는 모두 24 개의 비트 가 있 는데 6bit 단위 로 4 개의 그룹 으로 나 뉘 는데 각 그룹 은 10 진법 으로 나타 난 수 치 는 0 에서 63 사이 에 만 떨어진다 는 것 을 나타 낸다.대응 하 는 값 의 위치 문자 로 대체 합 니 다.인쇄 가능 한 문 자 는+-0123456789 ABCDEFGHIJKLMNOPQRSTuvWXYZabcdefghijklmnopqrstuvwxyz 로 모두 64 글자 입 니 다.base 64 인쇄 문자 에 비해 uuencode 에'-'문자 가 하나 더 있 고'/'문자 가 하나 더 없습니다.그러나 그 안의 문자 순 서 는 Base 64 와 완전히 다르다.UUencode 와 비교 하면 이 안에 선택 한 문 자 는 모두 일반적인 문자 이 고 특수 문자 가 없습니다.이것 도 그 당시 유행 한 사용 원인 을 결정 한다!
60 개의 인 코딩 출력(45 개의 입력 바이트 에 해당)은 독립 된 줄 로 출력 됩 니 다.각 줄 의 시작 에 길이 문 자 를 추가 합 니 다.마지막 줄 을 제외 하고 길이 문 자 는 모두'h'라 는 문자(45,마침 64 문자 중 45 번 째'h'문자)이 어야 합 니 다.마지막 줄 의 길이 문 자 는 남 은 바이트 수 입 니 다. 64 문자 의 위치 에 표 시 된 문자 입 니 다.
질문:uuencode 인 코딩 을 xxencode 인 코딩 으로 바 꾸 는 것 은 어떻게 조작 합 니까?
2 중 인 코딩 원 리 를 보면 거의 같다.64 글자 가 다르다 는 거 야.한 번 에 uuencode 를 간단하게 변환 한 후 문 자 를 한 자리 씩(처리''문자)에서 32 를 빼 고 값 을 얻 습 니 다.이 값 은 xxencode 64 문자 에 대응 하 는 위치 문 자 를 바 꾸 면 됩 니 다.
XXencode 인 코딩 변환 과정
원시 문자
C
a
t
원본 ASCII 코드(10 진법)
67
97
116
ASCII 코드(바 이 너 리)
0
1
0
0
0
0
1
1
0
1
1
0
0
0
0
1
0
1
1
1
0
1
0
0
새로운 십 진법 수치
16
54
5
52
인 코딩 된 XXencode 문자
E
q
3
O
문자열:'Cat'인 코딩 후:Eq3O
XXencode 인 코딩 PHP 구현 과정

/**
 *xxencode  *
 *@author   
 *@copyright http://blog.chacuo.net/
 *@param string $src       
 *@return string encode      
 */
function c_xx_encode($src)
{
	//64      
	static $base="+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 ///    3   
 $lbyte = 3;
 ////    3      4   
 $slen=strlen($src);
 $smod = ($slen%$lbyte);
 $snum = floor($slen/$lbyte);
 
 
 $desc = array();
 
 //      0    
 $src = $smod===0?$src:$src.str_repeat("\0",$lbyte-$smod);
 $snum = $smod===0?$snum:$snum+1;
 
 for($i=0;$i<$snum;$i++)
 {
 ////  3   
 $_arr = array_map('ord',str_split(substr($src,$i*$lbyte,$lbyte)));
 
 ///     6  
 $_dec = array();
 $_dec[]=$_arr[0]>>2;
 $_dec[]=(($_arr[0]&3)<<4)|($_arr[1]>>4);
 $_dec[]=(($_arr[1]&0xF)<<2)|($_arr[2]>>6);
 $_dec[]=$_arr[2]&63;
  
 ///     , 64         
 foreach ($_dec as &$v)
 {
  $v=$base[$v];
 }
 $desc = array_merge($desc,$_dec);
 }
 

 // 60     (   45     )         ,            ,        ,        'h'  ASCII  (45),                 , 64       。
 $abyte = 60;
 $crlf = "\r
"; $alen = count($desc); $anum = floor($alen/$abyte); $amod = ($alen%$abyte); $adesc = array(); for ($i=0;$i<$anum;$i++) { $adesc[]='h'.implode('',array_slice($desc,$i*$abyte,$abyte)).$crlf; } /// if($amod!==0) { /// 45 $adesc[]=$base[$amod/4*$lbyte+($smod?$smod-$lbyte:$smod)].implode('',array_slice($desc,-$amod)).$crlf; } return implode('',$adesc); }
상기 코드 는 uuencode 인 코딩 에서 간단하게 수정 하여 기본적으로+32 부분 을 제거 합 니 다.인 코딩 원 리 를 알 고 있 습 니 다.사실 우 리 는 uuencode->xxencode 변환 을 쉽게 실현 할 수 있 습 니 다.


이상 전환 후 결 과 는 전문 변환 도구 와 일치 합 니 다.자,인쇄 가능 한 문자 로 바 이 너 리 바이트 의 인 코딩 방법 을 배 워 보 세 요.우 리 는 많은 재 미 있 는 것 을 발견 할 수 있다!앞으로 우리 가 자신의 인 코딩 전환 을 하면 많은 참고 가 될 수 있 습 니 다!여러분 의 의견 을 환영 합 니 다!

좋은 웹페이지 즐겨찾기