如何将wchar_t / TCHAR / WCHAR / LPTSTR拆分为QStringList?

时间:2016-03-12 15:11:37

标签: qt winapi qstring lptstr

在使用Win32API时,我必须使用的函数通过将它们写入LPTSTR类型的缓冲区以及写入的单个字符数来返回其结果。此处输入代码

由于此缓冲区是一个字符串,并且该函数可以返回多个值,因此实际结果数据如下所示:

Value1\0Value2\0Value3\0\0

将此内容放入QStringList的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

LPTSTR =指向TCHAR的长指针。在现代系统(具有unicode支持的系统)上,这与WCHAR数组同义。

由于输出缓冲区将包含每个都是两个字节的字符,因此它与UTF16兼容。

QString有一个fromUtf16静态方法,需要一个简单的强制转换来满足编译器。

在这种情况下,我们还必须指定整个字符串的总长度。如果不这样做,QString只会读取输入数据,直到第一个空字符为止,忽略任何其他结果数据。

一旦我们实际使用了QString,拆分就很简单了。调用QString的split()方法,指定包装在QChar中的空字符。

可选地,在我的情况下,需要将SplitBehavior指定为SkipEmptyParts,以确保没有空字符串(解析空字符的结果)最终出现在我想要的结果中(值的QStringList)。

示例:

// The data returned by the API call.
WCHAR *rawResultData = L"Value1\0Value2\0Value3\0";

// The number of individual characters returned.
quint64 numberOfWrittenCharacters = 22;

// Create a QString from the returned data specifying
// the size.
QString rString = 
QString::fromUtf16((const ushort *)rawResultData, numberOfWrittenCharacters);

// Finally, split the string into a QStringList
// ignoring empty results.
QStringList results = 
rString.split(QChar(L'\0'), QString::SkipEmptyParts);