如何使String到const wchar_t *转换函数在Windows和Linux下工作

时间:2009-12-07 16:01:21

标签: gcc wchar-t c-str

我从事为MSVCC / Windows编写的项目,我必须移植到GCC / Linux。 Project有自己的String Class,它将数据存储在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();
    }
}

这个问题是,当这个函数返回时,该对象不再存在,所以这不起作用。 我认为解决这个问题的唯一方法是:

  1. 不要使用String :: c_str()并直接调用.toStdString()。c_str()
  2. 使GCC将wchar_t视为16位类型
  3. 可能性对我来说意味着几个小时不必要的工作,我不知道可能性是否可能。我的问题是,如何最好地解决这个问题? 我很感激任何有用的建议。谢谢。

1 个答案:

答案 0 :(得分:0)

在我看来,有两种方式:

  1. 在需要时将QString转换为wchar_t *
  2. 让QString存储wchar_t *并直接返回QString :: unicode
  3. 这两个函数可以将QString转换为std :: string和std :: wstring
    QString::toStdWString
    QString::toStdString

    将QString构建为ucs4:

    #define QT_QSTRING_UCS_4
    #include "qstring.h"
    

    这可以在qt3(qstring.h)中使用。我找不到qt4的来源。