UUECODE UUECODE简介 UUECODE转换原理及算法
UUencode编码最初用于unix网络。它是一个在Unix系统下通过uucp邮件系统传输二进制数据的编码程序,也是一个从二进制到文本的编码。不是MIME编码的成员。它还定义了用可打印字符表示二进制字符的方法,并不是一个新的编码集。主要解决二进制字符在传输和存储中问题。早期广泛用于电子邮件,近年来在MIME中基本被Base64取代。电子邮件一般采用UU、MIME和BINHEX编码标准!我想知道如何通过这种编码将二进制字符转换成可打印字符!对我们以后做类似的治疗应该有很多启示。
UUencode编码过程。
Uuencode以每三个字节为单位对输入数据进行编码,并重复这一过程。如果最后剩余的数据少于三个字节,不足的部分将用零填充。这三个字节共有24位,分为4组,以6位为单位。每个组都用十进制表示,值只会落在0到63之间。每个数字加32,结果正好落在ASCII字符集的可打印字符范围内(32-空白…95-下划线)。每60个编码输出(相当于45个输入字节)将作为一个独立的行输出,长度字符将添加在每行的开头。除了最后一行,长度字符应该是ASCII字符“m”(77=32 ^ 45),最后一行的长度字符应该是32个ASCII字符。如果是0字节,应该转换成060而不是020,因为(前一个引用'')比020(空格'')好。
特征1:看特征,也是64个字符,一组6位数。为什么,为什么,它和我们的base64如此相似?是的,从这个定义中,我们确实发现它与base64非常相似。
特点:定义64个字符,不需要写映射表,加32转换成可打印字符范围。相比base64,更简单!
思考:它的字符范围是所有可打印字符,我们会发现64个字符集中有很多是特殊字符: "!"# $%' () *=' '等等。这些字符在不同的应用中可能有一些特殊的用途。因此,使用此代码时可能会出现一些问题。我想这可能就是UUencode逐渐被Base64取代的原因。
UUencode 64字符集。
打印字符十进制ASCII值UUECODE二进制表示UUECODE十进制表示可打印字符十进制ASCII值UUECODE二进制表示UUECODE十进制表示(空格)32 000 000 0 @ 64 100 000 32!33 000 001 1 A 65 100 001 33 ' 34 000 010 2 B 66 100 010 34 # 35 000 011 3 C 67 100 011 35美元36 000 100 4D 68 100 100 36% 37 000 101 5 E 69 100 101 37 38 000 110 6 F 70 100 110 38 ' 338 41 001 001 9 I 73 101 001 41 * 42 001 010 10J 74 101 010 42 43 001 011 11K 75 101 011 43,44 001 100 12 L 76 101 100 44-45 001 101 13M 77 101 101 45。 46 001 110 14牛78 101 110 46/47 001 111 15 O 79 101 111 47 0 48 010 000 16 P 80 110 000 48 1 49 010 001 17 Q 81 110 001 49 2 50 010 010 18 R 82 110 010 50 3 51 010 011 19S 83 110 011 51 4 52 010 100 20T 84 110 010 111 23 W 87 110 111 55 8 56 011 000 24 X 88 111 000 56 9 57 011 001 25Y 89 111 001 57 : 58 011 010 26 Z 90 111 010 58; 59 011 011 27 [ 91 111 011 59 60 011 100 28 \ 92 111 100 60=61 011 101 29 ] 93 111 101 61 62 011 110 30 ^ 94 111 110 62 ?63 011 111 31 _ 95 111 111 63 ' 96(1)000 000 64 UUECODE编码转换过程。
原始字符C a t原始ASCII码(十进制)67 97 116 ASCII码(二进制)0 100 01 10 00 01 11 00 01 11 01 00新的十进制值16 54 5 52 32 48 86 37 84编码的Uuencode字符0 V% T字符串:“Cat”编码:oV %tu影响力ode PHP实现过程。
编码过程,类似Base64!下面的代码是实现过程,大家可以看看转换方法!
/** *uuencode代码* * @作者成蓦* @版权所有http://blog.chacuo.net/* @ param string $ src待处理字符串* @返回string encode成品字符串*/function c _ uu _ encode($ src){///一次读取3个字节$ lbyte=3;////将原来的3字节转换为4字节$ slen=strlen($ src);$ smod=($ slen % $ lbyte);$ snum=floor($ slen/$ lbyte);$ desc=array();//用0字节填充剩余的字节$src=$smod===0?$ src : $ src . str _ repeat(' 0 ',$ lbyte-$ smod);$snum=$smod===0?$ snum : $ snum 1;for($ I=0;$ i $ snum$i ){////读取3字节$ _ arr=array _ map(' order ',str _ split (substr ($ src,$ I * $ lbyte,$ lbyte));///计算每个6位值$ _ dec=array();$ _ dec[]=$ _ arr[0]2;$ _ dec[]=($ _ arr[0]3)4)|($ _ arr[1]4);$ _ dec[]=($ _ arr[1]0xF)2)|($ _ arr[2]6);$ _ dec[]=$ _ arr[2]63;///每个6位值加32,读取ascii码。如果6位值为0,则替换foreach ($_dec为$ v){ $ v=$ v====0?`` : chr($ 32v);}$desc=array_merge($desc,$ _ dec);}//返回内爆(',$ desc);///以上代码只进行转换,不做进一步处理。//每60个编码输出(相当于45个输入字节)将作为一个独立的行输出,并且在每行的开头添加长度字符。除了最后一行,长度字符应该是ASCII字符‘m’(77=32 ^ 45),最后一行的长度字符是32,剩余字节数。$ abyte=60$ crlf=' \ r \ n$ alen=count($ desc);$ anm=floor($ alen/$ aby te);$ amod=($ alen % $ abyte);$ adesc=array();for($ I=0;$ i $ anum$i ){$adesc[]='M '。内爆('',array_slice($desc,$i*$abyte,$abyte))。$ crlf}///截取剩余的数组长度if($amod!==0){///以下计算小于45字节编码$adesc[]=chr($amod/4*3 32 ($smod?$smod-$lbyte:$smod))。内爆('',array_slice($desc,-$amod))。$ crlf} return inquide(',$ adesc);}以上只是PHP代码根据转换过程实现的方法!目前PHP中没有UUencode转换模块!
该代码转换的结果与使用工具的转换结果一致。我查了一些网上的转换方法,很多结果都不一致!最好先做个对比再用线上工具转换!未经验证的代码可能会给您带来麻烦!欢迎分享你的方法!
版权声明:UUECODE UUECODE简介 UUECODE转换原理及算法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。