我正在研究基于锌的闪存应用程序的原生扩展,我需要将a转换const char*为a wstring.
这是我的代码:
mdmVariant_t* appendHexDataToFile(const zinc4CallInfo_t *pCallInfo, int paramCount, mdmVariant_t **params) {
if(paramCount >= 2) {
const char *file = mdmVariantGetString(params[0]);
const char *data = mdmVariantGetString(params[1]);
return mdmVariantNewInt(native.AppendHexDataToFile(file, data));
}
else {
return mdmVariantNewBoolean(FALSE);
}
}
Run Code Online (Sandbox Code Playgroud)
但native.AppendHexDataToFile()需要两个wstring.我对C++并不是很擅长,我认为所有这些不同的字符串类型都令人困惑,我在网上找不到有用的东西.所以我问你们这是怎么做的.
编辑:字符串是UTF-8,我使用的是OSX和Windows XP/Vista/7
Lih*_*ihO 17
我建议你尽可能使用std::stringC风格的字符串(char*).您可以通过简单地将std::string对象const char*传递给构造函数来创建对象.
一旦你有了std::string,你可以创建一个简单的函数,将std::string包含多字节UTF-8字符转换为std::wstring包含UTF-16编码点(特殊字符的16位表示std::string).
有更多的方法可以做到这一点,这是通过使用MultiByteToWideChar函数的方式:
std::wstring s2ws(const std::string& str)
{
int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
std::wstring wstrTo( size_needed, 0 );
MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
return wstrTo;
}
Run Code Online (Sandbox Code Playgroud)
检查这些问题:将
多字节字符映射到它们的unicode点表示
为什么使用MultiByteToWideCharArray将std :: string转换为std :: wstring?
anh*_*ppe 14
AFAIK只适用于C++ 11及以上版本:
#include <codecvt>
// ...
std::wstring stringToWstring(const std::string& t_str)
{
//setup converter
typedef std::codecvt_utf8<wchar_t> convert_type;
std::wstring_convert<convert_type, wchar_t> converter;
//use converter (.to_bytes: wstr->str, .from_bytes: str->wstr)
return converter.from_bytes(t_str);
}
Run Code Online (Sandbox Code Playgroud)
您可以将char字符串wstring直接转换为以下代码:
char buf1[] = "12345678901234567890";
wstring ws(&buf1[0], &buf1[20]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47187 次 |
| 最近记录: |