-
UUENCODE
鎖定
- 中文名
- UUENCODE
- 屬 性
- 編碼
- 指 向
- 文字
- 存儲介質
- 硬介質
UUENCODE轉換過程
uu 編碼
uuencode 編碼方式用於將任意的二進制文件轉換為文本文件,比如email.轉換後的文件中僅包含可打印字符.
uuencode 運算法則將連續的 3字節編碼轉換成 4字節(8-bit 到 6-bit)的可打印字符. 該編碼的效率高於Hex 格式.
編碼算法為不斷地用3個字節數據列成一組(不足3個字節以零補齊)然後 此24位數據分為4 組,每組6位,再將得到的6位二進制數映射到ASCII碼32~95之間的字符,而每行以M 開頭(表示32+45),60個字符一行(包括”M”),最後一行以32+N 的ASCII字符開頭,N 為最後一行編碼的輸入字節數.編碼以一個只含一個空格的一行和只含”end”的一行結束.
從二進制文件中讀取 3字節的數據,表示如下(a7 表示 a字節的第 7位):
a7a6a5a4a3a2a1a0 b7b6b5b4b3b2b1b0 c7c6c5c4c3c2c1c0
轉換它們到4字節裏為如下所示:
0 0 a7a6a5a4a3a2 0 0 a1a0b7b6b5b4 0 0 b3b2b1b0c7c6 0 0 c5c4c3c2c1c0
然後,每個字節再加 0x20轉換為可打印的字符.
注意: 如果是一個 0字節那它應該被轉換為0x60而不是0x20,因為(前引用'`')優於 0x20(空格' ')
例如: 從文件中讀取的 3字節如下:
14 0F A8
00010100 00001111 10101000
轉換為 6-bit:
000101 000000 111110 101000
每字節高兩位補 0後為:
00000101 00000000 00111110 00101000
最後每字節再加 0x20,則 4字節輸出應該為:
25 60 5E 48
注意: 00字節被轉換為 0x60而不是 0x20.
因此,在一個 uuencoded文件中僅包含字符 0x21 '!'到 0x60 '`',它們都是可打印和可被 email傳送的.
這個轉換過程也意味着 uuencoded 文件要比原文件大 33%的.
UUENCODE編碼
outbuf[4] 輸出 uu編碼數據.
inbytep [3] 輸入二進制數據.
#define ENCODE_BYTE(b) (((b) == 0) 0x60 : ((b) + 0x20)) outbuf [0] = ENCODE_BYTE((inbytep [0] & 0xFC) >> 2); outbuf [1] = ENCODE_BYTE (((inbytep [0] & 0x03) ((inbytep [1] & 0xF0) >> 4)); outbuf [2] = ENCODE_BYTE (((inbytep [1] & 0x0F) ((inbytep [2] & 0xC0) >> 6)); outbuf [3] = ENCODE_BYTE (inbytep [2] & 0x3F);
UUENCODE解碼
linep [4] 輸入 uu編碼數據.
outbyte [3] 輸出二進制數據.
#define DECODE_BYTE(b) ((b == 0x60) 0 : b - 0x20) outbyte [0] = DECODE_BYTE (linep [0]); outbyte [1] = DECODE_BYTE (linep [1]); outbyte [0] outbyte [0] |= (outbyte [1] >> 4) & 0x03; outbyte [1] outbyte [2] = DECODE_BYTE (linep [2]); outbyte [1] |= (outbyte [2] >> 2) & 0x0F; outbyte [2] outbyte [2] |= DECODE_BYTE (linep [3]) & 0x3F;