快速业务通道

简单字符串转换

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

在做字符串、文本操作时,我们时常会需要在wchar_t *和char *之间做转换或搭桥。直 接用API,参数太多不容易记住,常常要查文档,浪费不少时间。为了自己方便,对简单的转 换写了一个简单的转换包装类。下次或者用得着,帖代码做为保存。

顺便提一下:发现有个东西很好用,std::stringstream系列 (#include < sstream >);其实,流式操作用起来都很happy,还有iostream、fstream;还有TCP的数据也是流 式的。

头文件:string.h

#pragma once
#ifndef __STRING__
#define __STRING__
/**
 * 以下代码由张家旺编写完成于2007-12-5,借用请保留该声明。
 */
namespace useful
{

 class translator
 {
 public:
 static wchar_t *translate(
  const char *str,size_t sub,wchar_t buf[],size_t num );
 static char *translate(
  const wchar_t *str,size_t sub,char buf[],size_t num );
 const wchar_t *translate( const char *str,size_t sub = -1 );
 const char *translate( const wchar_t *str,size_t sub = -1 );
 translator( void );
 ~translator( void );
 static translator &instance( void );
 private:
 void buffer( size_t len )
 {
  if( len > m_len )
  {
  delete[] m_buf;
  m_buf = new char[len];
  m_len = len;
  }
 }
 char *m_buf;
 size_t m_len;
 };

};

#endif //__STRING__

实现文件:string.cpp

#include < string >
#include < windows.h >
#include "./string.h"
#pragma warning( disable : 4267 )
namespace useful
{

 translator::translator( void ) : m_buf( 0 ),m_len( 0 )
 {
 }
 translator::~translator( void )
 {
 delete[] m_buf;
 }
 translator &translator::instance( void )
 {
 static translator impl = translator();
 return impl;
 }

 wchar_t *translator::translate(
 const char *str,size_t sub,wchar_t buf[],size_t num )
 {
 ::MultiByteToWideChar( CP_OEMCP,0,str,sub,buf,num );
 return buf;
 }
 char *translator::translate(
 const wchar_t *str,size_t sub,char buf[],size_t num )
 {
 ::WideCharToMultiByte( CP_OEMCP,0,str,sub,buf,num,0,0 );
 return buf;
 }
 const wchar_t *translator::translate( const char *str,size_t sub )
 {
 if( sub == std::string::npos ) sub = strlen( str );
 buffer( (sub+1) * 2 );
 wchar_t *buf = reinterpret_cast< wchar_t * >( m_buf );
 buf[sub] = L''\0'';
 return translate( str,sub,buf,sub );
 }
 const char *translator::translate( const wchar_t *str,size_t sub )
 {
 if( sub == std::wstring::npos ) sub = wcslen( str );
 buffer( sub + 1 );
 m_buf[sub] = ''\0'';
 return translate( str,sub,m_buf,sub );
 }

};

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号