您的位置:

wstring转string详解

一、wstring和string简介

wstring和string是c++中的两种字符串类型,它们在处理不同数据类型的字符串时有不同的用途。string是使用char类型来表示的,而wstring使用wchar_t类型来表示。wchar_t是C++提供的一种可以存储Unicode字符的保证类型。在现代的计算机操作系统中,多语言的字符集已经成为了标配,wstring也因此得到了广泛的使用。但是,由于string和wstring是两种不同的类型,所以它们在进行转换的时候需要特殊的处理。

二、wstring转string方法

1、使用c++11中的新特性

在c++11中提供了一种非常方便的方法来进行wstring和string之间的转换。我们可以使用C++11中的std::wstring_convert类来完成这个转换。

#include 
#include 
   

std::wstring_convert
    
     > converter;
std::wstring wstr = L"hello world!";
std::string str = converter.to_bytes(wstr);

     
    
   
  

在上述代码中,我们首先定义一个std::wstring_convert类的对象converter,并指定其模板参数为std::codecvt_utf8 ,即将wstring转化为对应的UTF8编码的string类型。接着我们定义一个wstring变量wstr,并初始化为"L hello world!",然后使用converter的成员函数to_bytes将wstring类型的数据转化为string类型的数据。

2、使用c_str()方法

我们也可以选择使用c_str()方法来将wstring转化为string类型。这种方法的原理是首先使用wstr.c_str()将wstring类型的数据转为wchar_t*类型,然后再将wchar_t*类型的数据转为string类型。

#include 

std::wstring wstr = L"hello world!";
std::string str = std::string(wstr.begin(), wstr.end());

  

在上述代码中,我们首先定义一个wstring变量wstr,并初始化为"L hello world!",接着我们使用string的构造函数将wstring类型的迭代器转化为string类型。

三、其他类型转换

1、int转string

在C++中,将int类型的数据转化为string类型非常简单。我们可以使用stirng的构造函数将int类型的数据转化为string类型。

#include 

int i = 123;
std::string str = std::to_string(i);

  

在上述代码中,我们首先定义一个int变量i,并初始化为123,然后使用std::to_string函数将int类型的数据转化为string类型。

2、QString转string

在Qt框架中,QString和std::string是两种不同的字符串类型。如果我们需要在两种类型之间进行转换,我们可以使用QString和std::string提供的toStdString和fromStdString两个函数来完成这个过程。

#include 

QString qstr = "hello world";
std::string str = qstr.toStdString();

  

在上述代码中,我们首先定义一个QString类型的变量qstr,并初始化为"hello world",然后使用Qstring的成员函数toStdString将QString类型的数据转化为std::string类型。

3、Tensor转int

在TensorFlow的深度学习框架中,Tensor是一种用来表示多维数组和矩阵的数据结构。如果我们需要将一个Tensor转换为一个int类型的数值,我们可以使用Tensor底层的数据结构来完成这个转换。

#include 

tensorflow::Tensor tensor(tensorflow::DT_INT32, tensorflow::TensorShape());
auto tensor_map = tensor.tensor
   ();
tensor_map(0) = 123;
int i = tensor_map(0);

   
  

在上述代码中,我们首先定义一个Tensor类型的变量tensor,并指定它的数据类型为tensorflow::DT_INT32,维度为0。接着,我们使用auto类型来定义tensor的底层数据结构,并将第0个维度的值设为123。最后,我们使用tensor_map(0)将tensor中的值转换为int类型的数据。