相关疑难解决方法(0)

如何将wstring转换为字符串?

问题是如何将wstring转换为字符串?

我有下一个例子:

#include <string>
#include <iostream>

int main()
{
    std::wstring ws = L"Hello";
    std::string s( ws.begin(), ws.end() );

  //std::cout <<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;
    std::cout <<"std::string =     "<<s<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

注释掉的输出是:

std::string =     Hello
std::wstring =    Hello
std::string =     Hello
Run Code Online (Sandbox Code Playgroud)

但不仅仅是:

std::wstring =    Hello
Run Code Online (Sandbox Code Playgroud)

这个例子有什么不对吗?我可以像上面那样进行转换吗?

编辑

新的例子(考虑到一些答案)是

#include <string>
#include <iostream>
#include <sstream>
#include <locale>

int main()
{
    setlocale(LC_CTYPE, "");

    const std::wstring ws = L"Hello";
    const std::string s( ws.begin(), ws.end() );

    std::cout<<"std::string =     "<<s<<std::endl;
    std::wcout<<"std::wstring =    "<<ws<<std::endl;

    std::stringstream ss;
    ss …
Run Code Online (Sandbox Code Playgroud)

c++ unicode stl wstring

191
推荐指数
13
解决办法
26万
查看次数

C++ 11中支持Unicode的程度如何?

我读过并听说C++ 11支持Unicode.关于这一点的一些问题:

  • C++标准库如何支持Unicode?
  • 难道std::string做自己应该?
  • 我该如何使用它?
  • 潜在的问题在哪里?

c++ unicode c++11

176
推荐指数
5
解决办法
7万
查看次数

如何在C++(Unicode)中将std :: string转换为LPCWSTR

我正在寻找一种方法,或用于将std :: string转换为LPCWSTR的代码片段

c++ winapi

110
推荐指数
3
解决办法
17万
查看次数

直接写入std :: string内部缓冲区

我正在寻找一种方法将一些数据填充到DLL边界的字符串中.因为我们使用不同的编译器,所有的dll接口都是简单的char*.

是否有正确的方法将指针传递给dll函数,以便它能够直接填充字符串缓冲区?

string stringToFillIn(100, '\0');
FunctionInDLL( stringToFillIn.c_str(), stringToFillIn.size() );   // definitely WRONG!
FunctionInDLL( const_cast<char*>(stringToFillIn.data()), stringToFillIn.size() );    // WRONG?
FunctionInDLL( &stringToFillIn[0], stringToFillIn.size() );       // WRONG?
stringToFillIn.resize( strlen( stringToFillIn.c_str() ) );
Run Code Online (Sandbox Code Playgroud)

看起来最有希望的是&stringToFillIn [0]但是这是一个正确的方法,假设你认为string :: data()==&string [0]?这似乎不一致.

或者最好是吞下额外的分配并避免问题:

vector<char> vectorToFillIn(100);
FunctionInDLL( &vectorToFillIn[0], vectorToFillIn.size() );
string dllGaveUs( &vectorToFillIn[0] );
Run Code Online (Sandbox Code Playgroud)

c++ string

34
推荐指数
4
解决办法
3万
查看次数

如何将TCHAR数组转换为std :: string?

如何将TCHAR数组转换为std::string(不是std::basic_string)?

c++ windows string unicode tchar

27
推荐指数
4
解决办法
6万
查看次数

将wstring转换为以UTF-8编码的字符串

我需要在wstring和string之间进行转换.我想,使用codecvt facet应该可以解决问题,但它似乎不适用于utf-8语言环境.

我的想法是,当我将utf-8编码文件读取到字符时,一个utf-8字符被读入两个普通字符(这就是utf-8的工作原理).我想从我的代码中使用的库的wstring表示创建这个utf-8字符串.

有谁知道怎么做?

我已经尝试过了:

  locale mylocale("cs_CZ.utf-8");
  mbstate_t mystate;

  wstring mywstring = L"??žýáí";

  const codecvt<wchar_t,char,mbstate_t>& myfacet =
    use_facet<codecvt<wchar_t,char,mbstate_t> >(mylocale);

  codecvt<wchar_t,char,mbstate_t>::result myresult;  

  size_t length = mywstring.length();
  char* pstr= new char [length+1];

  const wchar_t* pwc;
  char* pc;

  // translate characters:
  myresult = myfacet.out (mystate,
      mywstring.c_str(), mywstring.c_str()+length+1, pwc,
      pstr, pstr+length+1, pc);

  if ( myresult == codecvt<wchar_t,char,mbstate_t>::ok )
   cout << "Translation successful: " << pstr << endl;
  else cout << "failed" << endl;
  return 0;
Run Code Online (Sandbox Code Playgroud)

它为cs_CZ.utf-8语言环境返回'failed',并且对cs_CZ.iso8859-2语言环境正常工作.

c++ string utf-8 wstring

17
推荐指数
3
解决办法
3万
查看次数

将窄字符串转换为宽字符串

我怎样才能将窄幅转换string为宽幅string

我试过这个方法:

string myName;
getline( cin , myName );
wstring printerName( L(myName) );  // error C3861: 'L': identifier not found
wchar_t* WprinterName = printerName.c_str(); // error C2440: 'initializing' : cannot convert from 'const wchar_t *' to 'wchar_t *'
Run Code Online (Sandbox Code Playgroud)

但我得到上面列出的错误.

为什么我会收到这些错误?我该如何解决它们?

有没有其他方法可以直接将narrow字符串转换为wide字符串?

c++ string unicode visual-c++

6
推荐指数
2
解决办法
2万
查看次数

如何将 std::string 转换为 wchar_t*

std::regex regexpy("y:(.+?)\"");
std::smatch my;
regex_search(value.text, my, regexpy);
y = my[1];

std::wstring wide_string = std::wstring(y.begin(), y.end());
const wchar_t* p_my_string = wide_string.c_str();
wchar_t* my_string = const_cast<wchar_t*>(p_my_string);

URLDownloadToFile(my_string, aDest);
Run Code Online (Sandbox Code Playgroud)

我正在使用Unicode,源字符串的编码是ASCIIUrlDownloadToFile扩展到UrlDownloadToFileW (wchar_t*)上面的代码在调试模式下编译,但有很多警告,如:

warning C4244: 'argument': conversion from 'wchar_t' to 'const _Elem', possible loss of data
Run Code Online (Sandbox Code Playgroud)

那么我想问一下,如何将 a 转换std::string为 a wchar_t

c++

6
推荐指数
0
解决办法
138
查看次数

使用const char*填充wstring的最佳方法

我必须"翻译"一个:

char数据[32]

进入:

tstring数据;

其中tstringtypedef为std::stringstd::wstring取决于预处理器定义.

假设data[32]只包含ASCII字符,那么将这些数据传递给tstring对象的最简单方法是什么?

c++ string wstring

3
推荐指数
1
解决办法
4283
查看次数

为什么在将窄字符串转换为宽字符串时用 0xFF 屏蔽字符?

考虑这个将窄字符串转换为宽字符串的函数:

std::wstring convert(const std::string& input)
{
    try
    {
        std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
        return converter.from_bytes(input);
    }
    catch(std::range_error& e)
    {
        std::size_t length = input.length();
        std::wstring result;
        result.reserve(length);
        for(std::size_t i = 0; i < length; i++)
        {
            result.push_back(input[i] & 0xFF);
        }
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

我很难理解在后备路径中需要这个表达式:

result.push_back(input[i] & 0xFF);
Run Code Online (Sandbox Code Playgroud)

为什么字符串中的每个字符都被 0xFF (0b11111111) 屏蔽?

c++ wstring c++11

2
推荐指数
1
解决办法
841
查看次数

如何将 std::string 转换为 L 数据类型

你好,我开始学习 C++,我正在尝试学习以 L 开头的数据类型,比如

auto something = L"Monday";
Run Code Online (Sandbox Code Playgroud)

什么数据类型是自动的?以及如何将 a 转换std::string为这种数据类型?

std::string my_string = "Hello World"; ? something = L"Hello World"

c++

2
推荐指数
1
解决办法
201
查看次数

如何获得std :: string的准确长度?

我正在std::string使用此代码修剪一个long 以使其适合文本容器.

std::string AppDelegate::getTrimmedStringWithRange(std::string text, int range)
{
    if (text.length() > range)
    {
        std::string str(text,0,range-3);
        return str.append("...");
    }
    return text;
}
Run Code Online (Sandbox Code Playgroud)

但在其他语言的情况下,如HINDI "??????"长度std::string是错误的.

我的问题是如何在所有测试用例中检索std :: string的准确长度.

谢谢

c++ string std

1
推荐指数
2
解决办法
2178
查看次数

标签 统计

c++ ×12

string ×6

unicode ×4

wstring ×4

c++11 ×2

std ×1

stl ×1

tchar ×1

utf-8 ×1

visual-c++ ×1

winapi ×1

windows ×1