0

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

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

Value1\0Value2\0Value3\0\0

将其放入 QStringList 的最佳方法是什么?

4

1 回答 1

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);
于 2016-03-12T15:11:37.227 回答