常用编码详解
2007-07-21 21:36:06 来源:WEB开发网核心提示: 注:在编码处理时候,我们需要对一个字节判断属于哪类字符,常用编码详解(6),以便确定处理规则,如果简单的使用范围比较的方式,需要一个哈希表,对一个base64字符都可以直接得到0-64之间的一个数:byte base64Value[128];这两个哈希表在使用前要初始化:void init
注:在编码处理时候,我们需要对一个字节判断属于哪类字符,以便确定处理规则,如果简单的使用范围比较的方式,效率很低,我们采用哈希表的思路:建立一个256长的数组,那么对于每一个字节的值,就可以定义一个类型。判断时候,对每个字符都直接取数组的值。
// mask value defined for indentify the type of a byte
#define BASE64 0x01
#define SAFE 0x02
#define SPACE 0x04
byte byteType[256]; // hash table used for find the type of a byte
bool firstTime = true; // the first time to use the lib, wait for init the table
// 注:为了解码base64编码部分的字符,需要一个哈希表,对一个base64字符都可以直接得到0-64之间的一个数:
byte base64Value[128];
这两个哈希表在使用前要初始化:
void initUTF7Tables()
{
byte *s;
if(!firstTime)
return;
// not necessary, but should do it to be robust
memset(byteType, 0, 256);
memset(base64Value, 0, 128);
for(s=base64Chars; *s!=''''; s++)
{
byteType[*s] |= BASE64;
base64Value[*s] = s - base64Chars; // the offset, it is a 6bits value,0-64
}
for(s=safeChars; *s!=''''; s++)
byteType[*s] |= SAFE;
for(s=spaceChars; *s!=''''; s++)
byteType[*s] |= SPACE;
firstTime = false;
}
UTF-7编码转换时候,是与当前字符是与状态有关的,也就是说:
更多精彩
赞助商链接