3

我正在使用 Qt 处理现有项目。我正在尝试通过串行电缆将字符串发送到恒温器以向其发送命令。我需要确保字符串仅包含 0-9、af,并且长度不超过或少于 6 个字符。我试图使用 QString.contains,但我目前被卡住了。任何帮助,将不胜感激。

4

1 回答 1

12

你有两个选择:

使用 QRegExp

使用QRegExp该类创建一个正则表达式来查找您要查找的内容。在您的情况下,类似以下内容可能会起到作用:

QRegExp hexMatcher("^[0-9A-F]{6}$", Qt::CaseInsensitive);
if (hexMatcher.exactMatch(someString))
{
   // Found hex string of length 6.
}

更新

Qt 5 用户应该考虑使用QRegularExpression而不是QRegExp

QRegularExpression hexMatcher("^[0-9A-F]{6}$",
                              QRegularExpression::CaseInsensitiveOption);
QRegularExpressionMatch match = hexMatcher.match(someString);
if (match.hasMatch())
{
    // Found hex string of length 6.
}

仅使用 QString

检查字符串的长度,然后检查是否可以成功将其转换为整数(使用基数 16 转换):

bool conversionOk = false;
int value = myString.toInt(&conversionOk, 16);
if (conversionOk && myString.length() == 6)
{
   // Found hex string of length 6.
}
于 2013-05-31T16:01:19.830 回答