Convert const char* to wstring

c++

Solution

I recommend you using `std::string` instead of C-style strings (`char*`) wherever possible. You can create `std::string` object from `const char*` by simple passing it to its constructor.

Once you have `std::string`, you can create simple function that will convert `std::string` containing multi-byte UTF-8 characters to `std::wstring` containing UTF-16 encoded points (16bit representation of special characters from `std::string`).

There are more ways how to do that, here's the way by using MultiByteToWideChar function:

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;
}

Check these questions too: Mapping multibyte characters to their unicode point representation Why use MultiByteToWideCharArray to convert std::string to std::wstring?

Problem

I'm working on a native extension for a zinc based flash application and I need to convert a `const char*` to a `wstring`. This is my code: ``` 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); } } ``` But `native.AppendHexDataToFile()` needs two `wstring`. I'm not very good with C++ and I think all those different string types are totally confusing and I didn't find something useful in the net. So I'm asking you guys how to do it. Edit: The Strings are UTF-8 and I'm using OSX and Windows XP/Vista/7

Original source

Related problems