用 const char* 填充 wstring 的最佳方法
Best way to fill wstring with const char*
我必须"translate"一个:
char data[32]
变成:
tstring data;
其中 tstring
是 std::string
的 typedef 或 std::wstring
取决于预处理器定义。
假设 data[32]
仅包含 ASCII 字符,将此数据传递到 tstring
对象的最简单方法是什么?
编辑:不需要临时 std::string。我已经用一个例子更新了我的答案。
看这里:
C++ Convert string (or char*) to wstring (or wchar_t*)
#include <locale>
#include <codecvt>
#include <string>
#define XWSTRING
#ifdef XWSTRING
typedef std::wstring xstring;
#else
typedef std::string xstring;
#endif
xstring initString(const char* data)
{
#ifdef XWSTRING
static std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return xstring(converter.from_bytes(data));
#else
return xstring(data);
#endif
}
int main()
{
char in_data[32] = "HELLO WORLD";
xstring out_data = initString(in_data);
}
由于您不需要进行任何字符转换,因此您可以使用字符向量初始化这两个字符串。考虑这个例子:
#include <string>
#include <vector>
int main()
{
char data[32];
std::vector<char> v(data, data + 32);
std::string str(v.begin(), v.end());
std::wstring wstr(v.begin(), v.end());
}
我必须"translate"一个:
char data[32]
变成:
tstring data;
其中 tstring
是 std::string
的 typedef 或 std::wstring
取决于预处理器定义。
假设 data[32]
仅包含 ASCII 字符,将此数据传递到 tstring
对象的最简单方法是什么?
编辑:不需要临时 std::string。我已经用一个例子更新了我的答案。
看这里: C++ Convert string (or char*) to wstring (or wchar_t*)
#include <locale>
#include <codecvt>
#include <string>
#define XWSTRING
#ifdef XWSTRING
typedef std::wstring xstring;
#else
typedef std::string xstring;
#endif
xstring initString(const char* data)
{
#ifdef XWSTRING
static std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
return xstring(converter.from_bytes(data));
#else
return xstring(data);
#endif
}
int main()
{
char in_data[32] = "HELLO WORLD";
xstring out_data = initString(in_data);
}
由于您不需要进行任何字符转换,因此您可以使用字符向量初始化这两个字符串。考虑这个例子:
#include <string>
#include <vector>
int main()
{
char data[32];
std::vector<char> v(data, data + 32);
std::string str(v.begin(), v.end());
std::wstring wstr(v.begin(), v.end());
}