uu 编码 (将3字节BIN数据转换成4字节可打印ASCII字符)(转自suncilang.21ic.org)
来源:互联网 发布:mac怎么拖动安装 编辑:程序博客网 时间:2024/04/28 15:38
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%的.
===== 编码 =====
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;
详细描述见 http://www.wotsit.org
// 结束.
- uu 编码 (将3字节BIN数据转换成4字节可打印ASCII字符)(转自suncilang.21ic.org)
- eCos学习笔记(转自suncilang.21ic.org)
- 读卡器应用函数整理 3.将每个十六进制存储的字节转换成ascii字符存储
- 字节、字符、ASCII码、UTF-8编码
- 字符、字节、ASCII码
- ASCII+Unicode+UTF8(字符编码方式->字节) Base64(字节编码方式->64字符)
- [转]字符,字节和编码
- [转]字符,字节和编码
- [转]字符,字节和编码
- [转]字符,字节和编码
- [转]字符,字节和编码
- [转]字符,字节和编码
- 字符,字节和编码(转)
- 字符,字节和编码(转)
- 【转】字符,字节和编码
- [转]MODBUS通信协议详解〔http://suncilang.21ic.org/user1/245/archives/2007/37664.html〕
- 将两个字符转换为一个字节
- 介绍一种将ASCII码字符串转换为二进制字节数据的方法
- 唉,项目太多,有没有兄弟帮帮忙啊~~~
- 喜欢的38句!
- 5,分类整理得很不错的一些常用API
- how to pronounce linux
- [转]绝对背后的微笑-再谈DVBBS漏洞
- uu 编码 (将3字节BIN数据转换成4字节可打印ASCII字符)(转自suncilang.21ic.org)
- 胡萝卜排骨汤
- 最近有点力不从心,好长时间没来了!
- eCos学习笔记(转自suncilang.21ic.org)
- (转贴)提高ASP.Net应用程序性能的十大方法
- 用实验快速配置Nfs
- 用实验快速学习sendmail
- 一个晚上,输掉了整个世界......zz
- 用实验快速掌握DNS配置