XXencode 인 코딩,XX 인 코딩 소개,XXencode 인 코딩 변환 원리 와 알고리즘
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 변환 을 쉽게 실현 할 수 있 습 니 다.이상 전환 후 결 과 는 전문 변환 도구 와 일치 합 니 다.자,인쇄 가능 한 문자 로 바 이 너 리 바이트 의 인 코딩 방법 을 배 워 보 세 요.우 리 는 많은 재 미 있 는 것 을 발견 할 수 있다!앞으로 우리 가 자신의 인 코딩 전환 을 하면 많은 참고 가 될 수 있 습 니 다!여러분 의 의견 을 환영 합 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
데이터 중심 애플리케이션 설계- 04장. 부호화와 발전JSON, XML, 프로토콜 버퍼, 스리프트(Thrift), 아브로(avro) 등.. REST (Representational State Transfer, REST), RPC(remote procedure call)...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.