Qt检查QString以查看它是否是有效的十六进制值

时间:2013-05-31 15:11:17

标签: qt hex qstring

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

1 个答案:

答案 0 :(得分:10)

您有两种选择:

使用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

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

bool conversionOk = false;
int value = myString.toInt(&conversionOk, 16);
if (conversionOk && myString.length() == 6)
{
   // Found hex string of length 6.
}