UUENCODE

UUENCODE

uuencode是將二進制檔案轉換為文本檔案的過程,轉換後的檔案可以通過純文本e-mail進行傳輸,在接收方對該檔案進行uudecode,即將其轉換為初始的二進制檔案。

uu 編碼

uuencode 編碼方式用於將任意的二進制檔案轉換為文本檔案,比如email.轉換後的檔案中僅包含可列印字元·

uuencode 運算法則將連續的 3位元組編碼轉換成 4位元組(8-bit 到 6-bit)的可列印字元· 該編碼的效率高於Hex 格式

基本介紹

  • 中文名:UUENCODE
  • 屬性:編碼
  • 指向:文字
  • 存儲介質:硬介質
轉換過程,===== 編碼 =====,===== 解碼 =====,

轉換過程

uuencode是將二進制檔案轉換為文本檔案的過程,轉換後的檔案可以通過純文本e-mail進行傳輸,在接收方對該檔案進行uudecode,即將其轉換為初始的二進制檔案。
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%的.

===== 編碼 =====

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) << 4) +
((inbytep [1] & 0xF0) >> 4));
outbuf [2] = ENCODE_BYTE (((inbytep [1] & 0x0F) << 2) +
((inbytep [2] & 0xC0) >> 6));
outbuf [3] = ENCODE_BYTE (inbytep [2] & 0x3F);

===== 解碼 =====

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] <<= 2;
outbyte [0] |= (outbyte [1] >> 4) & 0x03;
outbyte [1] <<= 4;
outbyte [2] = DECODE_BYTE (linep [2]);
outbyte [1] |= (outbyte [2] >> 2) & 0x0F;
outbyte [2] <<= 6;
outbyte [2] |= DECODE_BYTE (linep [3]) & 0x3F;

相關詞條

熱門詞條

聯絡我們