複製鏈接
請複製以下鏈接發送給好友

UUENCODE

鎖定
UUENCODE是將二進制文件轉換為文本文件的過程,轉換後的文件可以通過純文本e-mail進行傳輸,在接收方對該文件進行uudecode,即將其轉換為初始的二進制文件。
中文名
UUENCODE
屬    性
編碼
指    向
文字
存儲介質
硬介質

目錄

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;