UUencode 인 코딩,UU 인 코딩 소개,UUencode 인 코딩 변환 원리 와 알고리즘

6796 단어 UUencodeUU 인 코딩
UUencode 인 코딩 은 먼저 유 닉 스 네트워크 에 사 용 됩 니 다.먼저 유 닉 스 시스템 에서 바 이 너 리 자 료 를 uucp 메 일 시스템 에서 전송 하 는 인 코딩 프로그램 이자 바 이 너 리 문자 인 코딩 입 니 다.MIME 인 코딩 의 일원 에 속 하지 않 습 니 다.이것 도 인쇄 가능 한 문자 로 바 이 너 리 문 자 를 표시 하 는 방법 을 정 의 했 습 니 다.새로운 인 코딩 집합 이 아 닙 니 다.주로 바 이 너 리 문자 가 전송,저장 에 있 는 문 제 를 해결 합 니 다.초기 에는 이메일 에 많이 사용 되 었 으 나 최근 몇 년 동안 MIME 에서 Base 64 로 대체 되 었 다.E-mail 에 서 는 보통 UU,MIME,BINHEX 세 가지 인 코딩 기준 을 사용 합 니 다!이 인 코딩 이 바 이 너 리 문 자 를 인쇄 가능 한 문자 로 바 꾸 는 것 을 알 고 싶 습 니 다!우리 가 앞으로 비슷 한 일 을 하 는 것 에 대해 서 는 많은 시사 점 이 있 을 것 이다.
UUencode 인 코딩 과정
Uuencode 는 입력 자 료 를 세 바이트 단위 로 인 코딩 하 며 이렇게 반복 합 니 다.마지막 에 남 은 자료 가 세 바이트 보다 적 으 면 부족 한 부분 은 0 으로 보완 한다.이 세 바 이 트 는 모두 24 비트 로 6-bit 단위 로 4 개의 그룹 으로 나 뉘 는데 각 그룹 은 10 진법 으로 나타 나 는 수 치 는 0 에서 63 사이 에 만 떨어진다 는 것 을 나타 낸다.각 수 에 32 를 더 하면 ASCII 문자 가 인쇄 가능 한 문자(32-공백...95-밑줄)의 범위 에 떨 어 집 니 다.60 개의 인 코딩 출력(45 개의 입력 바이트 에 해당)은 독립 된 줄 로 출력 되 며,줄 의 시작 에 길이 문 자 를 추가 합 니 다.마지막 줄 을 제외 하고 길이 문 자 는'M'이라는 ASCII 문자(77=32+45)이 어야 합 니 다.마지막 줄 의 길이 문 자 는 32+나머지 바이트 수 는 ASCII 문자 입 니 다.0 바이트 라면 0 으로 바 뀌 어야 합 니 다.×60 이지 0 이 아니다.×20.0 보다 좋 기 때 문 입 니 다.×20(스페이스 바').
특징 1:특징 을 보 셨 죠?64 글자 이자 6 자리 입 니 다.왜,왜,우리 베이스 64 랑 이렇게 비슷 하지?예,이 정의 에서 우 리 는 그것 이 base 64 에 비해 매우 비슷 하 다 는 것 을 확실히 알 게 되 었 습 니 다.
특징 2:64 문 자 를 정의 합 니 다.맵 을 쓰 지 않 고 32 를 추가 하여 인쇄 가능 한 문자 범위 로 변환 합 니 다.base 64 보다 더 쉬 워 요!
사고 문제:그것 의 문자 범 위 는 모두 인쇄 가능 한 문자 입 니 다.우 리 는 64 문자 집합 중 특수 문자 가 많은 것 을 발견 할 수 있 습 니 다."!"\#¥%&'()*+='등등.이 문자 들 은 서로 다른 응용 에서 특수 한 용도 가 있 을 수 있다.따라서 이 인 코딩 을 사용 할 때 문제 가 생 길 수 있 습 니 다.UUencode 인 코딩 방법 이 Base 64 로 대체 되 는 원인 이 라 고 생각 합 니 다.
UUencode 64 문자 집합
인쇄 가능 문자
10 진 ASCII 값
uuencode
2 진 표시
uuencode
십 진법 표시
인쇄 가능 문자
10 진 ASCII 값
uuencode
2 진 표시
uuencode
십 진법 표시
(space)
32
000 000
0
@
64
100 000
32
!
33
000 001
1
A
65
100 001
33
"
34
000 010
2
B
66
100 010
34
#
35
000 011
3
C
67
100 011
35
$
36
000 100
4
D
68
100 100
36
%
37
000 101
5
E
69
100 101
37
&
38
000 110
6
F
70
100 110
38
'
39
000 111
7
G
71
100 111
39
(
40
001 000
8
H
72
101 000
40
)
41
001 001
9
I
73
101 001
41
*
42
001 010
10
J
74
101 010
42
+
43
001 011
11
K
75
101 011
43
,
44
001 100
12
L
76
101 100
44
-
45
001 101
13
M
77
101 101
45
.
46
001 110
14
N
78
101 110
46
/
47
001 111
15
O
79
101 111
47
0
48
010 000
16
P
80
110 000
48
1
49
010 001
17
Q
81
110 001
49
2
50
010 010
18
R
82
110 010
50
3
51
010 011
19
S
83
110 011
51
4
52
010 100
20
T
84
110 100
52
5
53
010 101
21
U
85
110 101
53
6
54
010 110
22
V
86
110 110
54
7
55
010 111
23
W
87
110 111
55
8
56
011 000
24
X
88
111 000
56
9
57
011 001
25
Y
89
111 001
57
:
58
011 010
26
Z
90
111 010
58
;
59
011 011
27
[
91
111 011
59
<
60
011 100
28
\
92
111 100
60
=
61
011 101
29
]
93
111 101
61
>
62
011 110
30
^
94
111 110
62
?
63
011 111
31
_
95
111 111
63
`
96
(1) 000 000
64
UUencode 인 코딩 변환 과정
원시 문자
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
+32
48
86
37
84
인 코딩 된 Uuencode 문자
0
V
%
T
문자열:'Cat'인 코딩 후:oV%T
UUencode PHP 구현 과정
인 코딩 변환 과정,Base 64 와 유사 합 니 다!아래 코드 는 실현 과정 입 니 다.우 리 는 전환 방법 을 볼 수 있 습 니 다!

/**
 *uuencode  *
 *@author   
 *@copyright http://blog.chacuo.net/
 *@param string $src       
 *@return string encode      
 */
function c_uu_encode($src)
{
	///    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;
		
		///   6    32,  ascii    6   0,   "`"  
		foreach ($_dec as &$v)
		{
			$v = $v===0?'`':chr($v+32);
		}
		$desc = array_merge($desc,$_dec);
	}
	//return implode('',$desc);
	
	///          ,       
	// 60     (   45     )         ,            ,        ,        'M'  ASCII  (77=32+45),          32+         ASCII  。
	$abyte = 60;
	$crlf = "\r
"; $alen = count($desc); $anum = floor($alen/$abyte); $amod = ($alen%$abyte); $adesc = array(); for ($i=0;$i<$anum;$i++) { $adesc[]='M'.implode('',array_slice($desc,$i*$abyte,$abyte)).$crlf; } /// if($amod!==0) { /// 45 $adesc[]=chr($amod/4*3+32+($smod?$smod-$lbyte:$smod)).implode('',array_slice($desc,-$amod)).$crlf; } return implode('',$adesc); }
이상 은 변환 과정 에 따라 PHP 코드 를 통 해 이 루어 지 는 방법 입 니 다!현재 PHP 에는 UUUencode 변환 모듈 이 없습니다!


이 코드 변환 결 과 는 도구 변환 결과 와 일치 합 니 다.나 는 온라인 에서 전환 방법 을 살 펴 보 았 는데,많은 결과 가 일치 하지 않 았 다!가장 좋 은 것 은 모두 온라인 도 구 를 사용 하여 전환 하기 전에 비 교 를 하 는 것 입 니 다!검 증 된 코드 가 없 으 면 귀 찮 을 수 있 습 니 다!당신 의 방법 을 공유 하 는 것 을 환영 합 니 다!

좋은 웹페이지 즐겨찾기