亂碼演算法大全(一)Uuencode (轉)
相信上過網的朋友們都遇見過“亂碼”,也就是在瀏覽網頁或看E時出現的不能辨認的字元。以前也有許多的文章介紹過“亂碼”,不過他們的文章只是講怎樣辨別和怎樣用工具解碼,並沒有詳細介紹各種編碼的演算法的實現,本文將對網際網路上最常用的幾種編碼的編碼和解碼演算法作以詳細的闡述。希望對想了解“亂碼”演算法或想在自己中實現這些功能朋友們有一些參考價值。本文的源程式用C語言寫成,形式為,可直接使用。:namespace prefix = o ns = "urn:schemas--com::office" />
Uuencode:
Uuencode 是將二進位制以文字檔案方式進行編碼表示、以利於基於文字傳輸環境中進行二進位制檔案的傳輸/的編碼方法之一, 在/二進位制新聞組中使用頻率比較高,經常用於 Attach 二進位制檔案。
這種編碼的特徵是:每一行開頭用“M”標誌。下面是我做的一個測試用的檔案mogao.txt,編碼為Uuencode:
begin 644 mogao.txt
M"0D)("`@(*&VPM+"ZOCMZBTBKH;
MU]6^HZAT96QN970Z+RR,#(N,3$R+C(P+C$S,CHR,Z.ILG4L:&0H)("`@
M("`@Q*JXWCMO/ZYI-?WRM*CN='`Z+R]M;V=A;RYB96YT:75N+FYE=`T*
M"0D)16UA:6QT;SIM;V=A;T`S-S$N;F5T#0H)("`@*BHJ*BHJ*BHJ*BHJ*BHJ
M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ("`@("`@("`@("`@("`@
M#0H)("`@*B"S_
MN'TS(J#0H)("`@*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
,*BHJ*BHJ*BHJ*BHJ
`
end
你可以把它單獨存成一個檔案:mogao.uue,然後用開啟,解壓即得mogao.txt。
Uuencode的演算法很簡單,編碼時它將3個字元順序放入一個 24 位的緩衝區,缺字元的地方補零,然後將緩衝區截斷成為 4 個部分,高位在先,每個部分 6 位,用下面的64個字元重新表示:
"`!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_"
在檔案的開頭有“begin xxx 被編碼的檔名”,在檔案的結尾有“end”,用來標誌Uue檔案的開始和結束。編碼時,每次讀取原始檔的45個字元,不足45個的用“NULL”補足為3的整數倍(如:23補為24),然後輸入目標檔案一個ASCII為:“32+實際讀取的字元數”的字元作為每一行的開始。讀取的字元編碼後輸入目標檔案,再輸入一個“換行符”。如果原始檔被編碼完了,那麼輸入“`(ASCII為96)”和一個“換行符”表示編碼結束。
解碼時它將4個字元分別轉換為4個6位字元後,擷取有用的後六位放入一個 24 位的緩衝區,即得3個二進位制程式碼。
下面我給出Uuencode編碼和解碼的C語言描述:
/*Uuencode編碼*/
void Uue(unsigned char chasc[3],unsigned char chuue[4])
/*
chasc:未編碼的二進位制程式碼
chuue:編碼過的Uue程式碼
*/
{int i,k=2;
unsigned char t=NULL;
for(i=0;i<3;i++)
{*(chuue+i)=*(chasc+i)>>k;
*(chuue+i)|=t;
if(*(chuue+i)==NULL) *(chuue+i)+=96;
else *(chuue+i)+=32;
t=*(chasc+i)<
t>>=2;
k+=2;
}
*(chuue+3)=*(chasc+2)&63;
if(*(chuue+3)==NULL) *(chuue+3)+=96;
else *(chuue+3)+=32;
}
/*Uuencode解碼*/
void unUue(unsigned char chuue[4],unsigned char chasc[3])
/*
chuue:未解碼的Uue程式碼
chasc:解碼過的二進位制程式碼
*/
{int i,k=2;
unsigned char t=NULL;
if(*chuue==96) *chuue=NULL;
else *chuue-=32;
for(i=0;i<3;i++)
{*(chasc+i)=*(chuue+i)< k+=2; if(*(chuue+i+1)==96) *(chuue+i+1)=NULL; else *(chuue+i+1)-=32; t=*(chuue+i+1)>>8-k; *(chasc+i)|=t; } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1006055/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 亂碼演算法大全 (轉)演算法
- jsp亂碼解決大全JS
- Linux亂碼轉換(一)Linux
- 編碼轉換統一防止亂碼
- 程式碼大全介紹 (轉)
- Linux亂碼轉換(二)Linux
- java的中文亂碼轉換Java
- mysql字元轉化以及亂碼原因MySql字元
- mysql 插入中文亂碼解決方案 轉MySql
- 埠大全(轉)
- SpringMVC的亂碼與時間轉換SpringMVC
- StreamWriter輸出中文亂碼的問題 (轉)
- Windows轉到linux中,檔案亂碼,檔案編碼轉換WindowsLinux
- 聊一聊編碼與亂碼的區別
- qt亂碼QT
- java 亂碼Java
- MySQL亂碼MySql
- 【演算法】亂序檢查演算法
- PHP 每日一函式 — 字串函式 convert_uuencode () & convert_uudecode ()PHP函式字串
- 《程式碼大全》程式碼生成
- Linux字符集不統一導致亂碼的解決步驟(轉)Linux
- PHP判斷一個字串是否包含亂碼PHP字串
- 【轉】iOS官方Saple大全iOS
- excel使用大全_轉載Excel
- windows快捷鍵大全 [轉]Windows
- ORACLE函式大全(轉)Oracle函式
- 行列轉換之大全~~~
- 自己動手豐衣足食-搞定網頁亂碼 (轉)網頁
- 控制程式碼的本質——撥亂反正篇 (轉)
- Javamail 中附件中文名字亂碼祥解 (轉)JavaAI
- activity影像亂碼
- activity影象亂碼
- mysql中文亂碼MySql
- Java Web亂碼JavaWeb
- secureCRT中文亂碼Securecrt
- 亂碼大解決
- 程式亂碼探索
- oracle 中文亂碼Oracle