UUencode 인 코딩,UU 인 코딩 소개,UUencode 인 코딩 변환 원리 와 알고리즘
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 변환 모듈 이 없습니다!이 코드 변환 결 과 는 도구 변환 결과 와 일치 합 니 다.나 는 온라인 에서 전환 방법 을 살 펴 보 았 는데,많은 결과 가 일치 하지 않 았 다!가장 좋 은 것 은 모두 온라인 도 구 를 사용 하여 전환 하기 전에 비 교 를 하 는 것 입 니 다!검 증 된 코드 가 없 으 면 귀 찮 을 수 있 습 니 다!당신 의 방법 을 공유 하 는 것 을 환영 합 니 다!