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

常用编码详解

 2007-07-21 21:36:06 来源:WEB开发网   
核心提示: 注:其中见到有人在使用的时候,申请缓冲区空间时候是申请了(zise + 1)个来,常用编码详解(10),最后一个字节写'''',结束字符串,其实没有必要判断是不是为空,因为删除空指针是没有问题的,但是在我调试时候发现:系统给的size已经包含了一个写入

注:其中见到有人在使用的时候,申请缓冲区空间时候是申请了(zise + 1)个来,最后一个字节写'''',结束字符串。但是在我调试时候发现:系统给的size已经包含了一个写入''''的字节,而且最后得到的串中,''''是已经被系统API写入了。(也许我的实验有错误,有待验证)。把Unicode字符数组转换为UTF-8和UTF-7的方法类似,只要是WideCharToMultiByte函数的第一个表示代码页参数改为CP_UTF7(65000)和CP_UTF8(65001)。

同样道理,把多字节转换为Unicode字符数组,也有相应的函数。和上面的函数类似,可以通过先提供一个空缓冲区而先得到需要的大小,然后开辟空间得到最后的字符数组。但是考虑到效率,可以适当牺牲一些空间,提供一个足够大的字符数组,数组大小在极端的情况下(全是ASCII)是和字节数组大小一样的。

int StringEncode::Gb2312ToUnicode(WCHAR **dest, const char *src)
{
  int length = strlen(src);        // null terminated buffer
  WCHAR *buffer = new WCHAR[length + 1];  // WCHAR means unsinged short, 2 bytes
                      // provide enough buffer size for Unicodes
  int ret = ::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, length, buffer, length);
  buffer[ret] = 0;
  if (*dest != 0)
    delete *dest;
  *dest = buffer;
  return ret;
}

注:删除以前的缓冲区时候的操作,其实没有必要判断是不是为空,因为删除空指针是没有问题的,因为delete内部提供了这样的机制。

上一页  5 6 7 8 9 10 

Tags:常用 编码 详解

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接