我是C++的新手(我是C#开发人员)。

我有一个SQLite包装器类,要求您将数据库名称作为const char*传递,但是我只有它作为Platform::String(在执行文件搜索之后)。

我似乎找不到找到将Platform::String转换为const char*的方法。

我已经在StackOverflow上看到了另一个问题,该问题解释了为什么它不直接但没有示例代码或端到端解决方案。

谁能帮我 ?

谢谢

最佳答案

免责声明:我对C++ / CX知之甚少,我的答案基于here文档。
String类包含16位Unicode字符,因此您不能直接获得指向8位char类型的字符的指针。您需要转换内容。

如果已知该字符串仅包含ASCII字符,则可以直接将其转换:

String s = whatever();
std::string narrow(s.Begin(), s.End());
function_requiring_cstring(narrow.c_str());

否则,字符串将需要翻译,这会变得很毛茸茸。以下可能做对了,将宽字符转换为多字节的窄字符序列:
String s = whatever();
std::wstring wide(s.Begin(), s.End());
std::vector<char> buffer(s.Length()+1);  // We'll need at least that much
for (;;) {
    size_t length = std::wcstombs(buffer.data(), wide.c_str(), buffer.size());
    if (length == buffer.size()) {
        buffer.resize(buffer.size()*2);
    } else {
        buffer.resize(length+1);
        break;
    }
}
function_requiring_cstring(buffer.data());

另外,您可能会发现忽略Microsoft关于如何处理字符串的想法,而使用std::string会更容易。

关于c++ - C++/CX-我需要将Platform::String传递给采用const char *的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13526512/

10-14 16:32
查看更多