QString中有等效的swprintf吗?

时间:2019-01-21 13:16:30

标签: c++ qt

我们正在将应用程序从Windows(CE)-ARM迁移到Linux-ARM。

我们正在使用Qt4.8。在Linux环境中,wchar通常为4个字节,但在Windows(CE)中为2个字节。由于内存问题,我们将gcc和glibc重建为2个字节的wchar。

swprintf在2个字节中无法正常工作。我们发现QString可以正确处理2个字节的wchar。

以下是自定义的wsprintf函数定义。这是Windows wsprintf到linux的包装函数。

    **Function definition**
    int wsprintf(wchar_t* f_wszOutData, wchar_t* f_wszformat, ...)  
    {
        va_list args;
        va_start(args,f_wszFormat);
        QString l_QszOutBuffer;
        QString l_QszFormat=QString::fromWCharArray(f_wszFormat);
        QByteArray l_QByteArray=l_QszFormat.toAscii();
        l_QszOutBuffer.vsprintf(l_QByteArray.data(),args);
        l_QszOutBuffer.toWCharArray(f_wszOutData);
        va_end(args);
        return l_QszOutBuffer.length(); 
    } 

    **Function Call**
    wchar_t l_wszOutput[200];
    wsprintf(l_wszOutput,L"%d %lf %s %ls", 78,89.90,"Hello world",L"world");

    **Output**
    78 89.900000 Hello world w

当前,QString的vsprintf()支持char *,int,double等。但是不支持wchar_t *。因此,最后一个参数不能正确打印。 QString的vsprintf()中是否支持格式化wchar_t *?还有其他方法吗?

0 个答案:

没有答案