WEB开发网
开发学院软件开发VC 常用编码详解 阅读

常用编码详解

 2007-07-21 21:36:06 来源:WEB开发网   
核心提示: 说明:对于合法的Unicode字符数组,可以通过逐个输入数组中的字符,常用编码详解(8),连续调用上面的函数,得到一个UTF-7字节序列,可以通过连续输入字节并调用上面的函数,判断返回值,需要说明的是:最后一个Unicode字符应该是上面三个字节数组中某个字符的等值,下面

说明:对于合法的Unicode字符数组,可以通过逐个输入数组中的字符,连续调用上面的函数,得到一个UTF-7字节序列。需要说明的是:最后一个Unicode字符应该是上面三个字节数组中某个字符的等值。

下面,我们实现一个简单的说明函数,功能是:输入一个UTF-7字节,可能得到并返回一个合法Unicode字符;也可能不能得到,比如遇到''+''或者因为还没有完成一个字符的拼装,这时返回一个标志字符0xfeff,这个字符常用来标志Unicode编码。

注:函数影响了state,nbits,bitBuffer三个全局变量。在开始处理第一个字节时候,变量需要被初始化为:

state = IN_ASCII;
nbits = 0;
bitBuffer = 0;
#define RET0 0xfeff
WCHAR UTF7ToUnicode(byte c)
{
  if(state == IN_ASCII)
  {
    if (c == ''+'')
    {
     state = AFTER_PLUS;
     return RET0;
    }
    else
    return (WCHAR)c;
  }
  if (state == AFTER_PLUS)
  {
    if (c == ''-'')
    {
     return (WCHAR)''+'';
    }
    else
    {
     state = IN_BASE64;
     nbits = 0;
     bitBuffer = 0; // it is not necessary
     // don''t return yet, continue to the IN_BASE64 mode
    }
   }
  
  // state == Base64
  if (byteType[c] & BASE64)
  {
    bitBuffer <<= 6;
    bitBuffer |= base64Value[c];
    nbits += 6;
    if (nbits >= 16)
    {
     nbits -= 16;
   return (WCHAR)((bitBuffer >> nbits) & 0x0000ffff);
    }
    return RET0;
  }
  // encount a byte which is not in base64 character set, switch out of base64 coding
  state = IN_ASCII;
  if (c != ''-'')
  {
    return (WCHAR)c;
  }
  return RET0;
}
说明:对于一个UTF-7序列,可以通过连续输入字节并调用上面的函数,判断返回值,得到一个Unicode字符数组。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:常用 编码 详解

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接