我们正在将应用程序从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 *?还有其他方法吗?