string和wstring相互转换方法,标准C++做成,可以在Linux Windows下运行

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

string 是c++标准库里面其中一个,封装了对字符串的操作 

把string转换为char* 有3中方法: 

1。data 

如: 

string str="abc"

char *p=str.data(); 

2.c_str 

如:string str="gdfd"

    char *p=str.c_str(); 

3 copy 

比如 

string str="hello"

char p[40]; 

str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置

*(p+5)=‘\0‘//要手动加上结束符

cout < <p;

/*
    string 转换为 wstring
*/
std::wstring c2w(const char *pc)
{
    std::wstring val = L"";

if(NULL == pc)
    {
        return val;
    }
    //size_t size_of_ch = strlen(pc)*sizeof(char);
    //size_t size_of_wc = get_wchar_size(pc);
    size_t size_of_wc;
    size_t destlen = mbstowcs(0,pc,0);
    if (destlen ==(size_t)(-1))
    {
        return val;
    }
    size_of_wc = destlen+1;
    wchar_t * pw  = new wchar_t[size_of_wc];
    mbstowcs(pw,pc,size_of_wc);
    val = pw;
    delete pw;
    return val;
}
/*
    wstring 转换为 string
*/
std::string w2c(const wchar_t * pw)
{
    std::string val = "";
    if(!pw)
    {
           return val;
    }
    size_t size= wcslen(pw)*sizeof(wchar_t);
    char *pc = NULL;
    if(!(pc = (char*)malloc(size)))
    {
           return val;
    }
    size_t destlen = wcstombs(pc,pw,size);
    /*转换不为空时,返回值为-1。如果为空,返回值0*/
    if (destlen ==(size_t)(0))
    {
        return val;
    }
    val = pc;
    delete pc;
    return val;
}

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

原文地址:https://www.cnblogs.com/sjwudhwhhw/p/10509870.html

时间: 2024-08-30 13:27:57

string和wstring相互转换方法,标准C++做成,可以在Linux Windows下运行的相关文章

[C++]C++标准里 string和wstring

typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; 前者string是常用类型,可以看作char[],其实这正是与string定义中的_Elem=char相一致.而wstring,使用的是wchar_t类型,这是宽字符,用于满足非ASCII字符的要求,例如Unicode编码,中文,日文,韩文什么的.对于wchar_t类型,实际上C++中都用与char函数相对应的wchar_t的函数,因为

PInvoke复习之深入理解char*与wchar_t*与string以及wstring之间的相互转换

本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下  #ifndef USE_H_       #define USE_H_       #include <iostream>       #include <windows.h>       #include <string>       using namespace std;       class CUser       {  

深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换 [转]

本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下. 1 #ifndef USE_H_ 2 #define USE_H_ 3 4 #include <iostream> 5 #include <windows.h> 6 #include <string> 7 using namespace std; 8 class CUser 9 { 10 public: 11 CUser(); 12

Xml与DataTable相互转换方法

1.Xml与DataTable相互转换方法:http://www.cnblogs.com/lilin/archive/2010/04/18/1714927.html Xml与DataTable相互转换方法

Bitmap和Drawable相互转换方法

很多开发者表示,不知道Android的Drawable和Bitmap之间如何相关转换.下面Android123给大家两种比较简单高效的方法. 一.Bitmap转Drawable Bitmap bm=xxx; //xxx根据你的情况获取 BitmapDrawable bd=BitmapDrawable(bm); Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可. 二. Drawable转Bitmap 转成Bitmap对象后,可以将Drawa

string 与wstring 的转换

std::wstring StringToWString(const std::string &str) { std::wstring wstr(str.length(),L' '); std::copy(str.begin(), str.end(), wstr.begin()); return wstr; } //只拷贝低字节至string中 std::string WStringToString(const std::wstring &wstr) { std::string str(w

【UML】Java代码与UML模型相互转换方法

最近重温了几个设计模式,看到大家的博客里面都是Java代码+UML视图,UML表达整体框架,然后再秀出具体的代码,点面结合.一目了然.所以也研究了一下Java代码与UML模型相互转换方法. 一.常用的UML建模工具 三大建模工具可以参考:UML建模工具Visio .Rational Rose.PowerDesign的比较 三者都能非常好的支持UML的建模,由于和Eclipse或者IDEA等代码IDE集成不太方便或者不可行,所以没有深入研究 二.Java.UML建模与反向工具推荐 十二个开源UML

[C/C++标准库]_[初级]_[过滤Windows文件名中的非法字符]

场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的字符,但是有些字符在windows上是不能作为文件名的,强行创建这类文件会失败. 2.一般可以通过正则表达式替换所有的非法字符,这里实现的是C++98 template(模板)方式的替换无效字符,std::string,std::wstring. 基本上windows上和字符串打交道都离不开wstring. 函数: template<class T> void FilterInvalidFileNameChar(

Linux环境下RPM包相互依赖的解决办法

Linux环境下安装Oracle11gR2提示缺少"Package: elfutils-libelf-devel-0.125    FAILED"包,按照提示安装该包时又提示缺少依赖包"elfutils-libelf-devel-static-x86_64",而安装依赖包时又提示缺少原有的包,形成了相互依赖的关系. [[email protected]_plat rpms]# rpm -ivh elfutils-libelf-devel-0.137-3.el5.x8