uuencode是將二進制文件轉換為文本文件的過程,轉換后的文件可以通過純文本e-mail進行傳輸,在接收方對該文件進行uudecode,即將其轉換為初始的二進制文件。
uu 編碼
uuencode 編碼方式用于將任意的二進制文件轉換為文本文件,比如email.轉換后的文件中僅包含可打印字符.
uuencode 運算法則將連續的 3字節編碼轉換成 4字節(8-bit 到 6-bit)的可打印字符. 該編碼的效率高于Hex 格式.
從二進制文件中讀取 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%的.
流程如下:
其轉換源碼如下:
//header #pragma once #define ENCODE_BYTE(b) (((b) == 0) ? 0x60 : ((b) + 0x20)) #define DECODE_BYTE(b) ((b == 0x60) ? 0 : b - 0x20) void Byte3ToAsc4(unsigned char inbyte[3],unsigned char outAsc[4]); void Asc4ToByte3(unsigned char inAsc[4],unsigned char outByte[3]); //body #include "StdAfx.h" #include "UUencode.h" //encode void Byte3ToAsc4(unsigned char inbyte[3],unsigned char outAsc[4]) { outAsc [0] = ENCODE_BYTE ((inbyte [0] & 0xFC) >> 2); outAsc [1] = ENCODE_BYTE (((inbyte [0] & 0x03) << 4) + ((inbyte [1] & 0xF0) >> 4)); outAsc [2] = ENCODE_BYTE (((inbyte [1] & 0x0F) << 2) + ((inbyte [2] & 0xC0) >> 6)); outAsc [3] = ENCODE_BYTE (inbyte [2] & 0x3F); } //decode void Asc4ToByte3(unsigned char inAsc[4],unsigned char outByte[3]) { outByte [0] = DECODE_BYTE (inAsc [0]); outByte [1] = DECODE_BYTE (inAsc [1]); outByte [0] <<= 2; outByte [0] |= (outByte [1] >> 4) & 0x03; outByte [1] <<= 4; outByte [2] = DECODE_BYTE (inAsc [2]); outByte [1] |= (outByte [2] >> 2) & 0x0F; outByte [2] <<= 6; outByte [2] |= DECODE_BYTE (inAsc [3]) & 0x3F; }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
