如何使 String 到 const wchar_t* 转换函数在 Windows 和 Linux 下工作
我正在开发一个为 MSVCC / Windows 编写的项目,我必须将其移植到 GCC / Linux。该项目有自己的 String 类,它将其数据存储在 Qt 的 QString 中。对于转换为 wchar_t* 最初有这个方法(对于 Windows):
const wchar_t* String::c_str() const
{
if (length() > 0)
{
return (const wchar_t*)QString::unicode();
}
else
{
return &s_nullString;
}
}
因为 unicode() 返回一个 QChar(16 位长),所以这在 Windows 下工作,因为 wchar_t 是 16 位,但现在使用 GCC wchar_t 是 32 位长,所以这不再起作用了。我试图用这个来解决这个问题:
const wchar_t* String::c_str() const
{
if ( isEmpty() )
{
return &s_nullString;
}
else
{
return toStdWString().c_str();
}
}
这个问题是,当这个函数返回时,该对象不再存在,所以这也不起作用。 我认为解决这个问题的唯一方法是:
- 不要使用 String::c_str() 并直接调用 .toStdString().c_str()
- 让 GCC 将 wchar_t 视为 16 位类型
可能意味着几个小时的不必要的时间对我有用,我不知道可能性 2 是否可能。我的问题是,如何最好地解决这个问题? 我将不胜感激任何有用的建议。谢谢。
I work on a project written for MSVCC / Windows, that I have to port to GCC / Linux. The Project has its own String Class, which stores its Data in a QString from Qt. For conversion to wchar_t* there was originally this method (for Windows):
const wchar_t* String::c_str() const
{
if (length() > 0)
{
return (const wchar_t*)QString::unicode();
}
else
{
return &s_nullString;
}
}
Because unicode() returns a QChar (which is 16 Bit long), this worked under Windows as wchar_t is 16 Bit there, but now with GCC wchar_t is 32 Bit long, so that doesn't work anymore. I've tried to solve that using this:
const wchar_t* String::c_str() const
{
if ( isEmpty() )
{
return &s_nullString;
}
else
{
return toStdWString().c_str();
}
}
The problem with this is, that the object doesn't live anymore when this function returns, so this doesn't work eiter.
I think the only way to solve this issue is to either:
- Don't use String::c_str() and call .toStdString().c_str() directly
- Make GCC treat wchar_t as 16 bit type
Possibility one would mean several hours of needless work to me and I don't know if possiblity 2 is even possible. My question is, how do I solve this issue best?
I'd appreciate any useful suggestion. Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在我看来,有两种方法:
这两个函数可以将 QString 转换为 std::string 和 std::wstring
QString::toStdWString
QString::toStdString
将 QString 构建为 ucs4 :
这可以在 qt3 中使用(qstring.h)。我找不到qt4的源码。
In my opinion, there are 2 ways :
These two functions can convert a QString to std::string and std::wstring
QString::toStdWString
QString::toStdString
To build QString as ucs4 :
This can be used in qt3(qstring.h). I can't find the source of qt4.