我正在与Qt合作开发现有项目。我正在尝试通过串行电缆将字符串发送到恒温器以向其发送命令。我需要确保字符串只包含0-9,a-f,并且长度不超过或少于6个字符。我试图使用QString.contains,但我现在卡住了。任何帮助将不胜感激。
答案 0 :(得分:10)
您有两种选择:
使用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.
}
检查字符串的长度,然后检查是否可以成功将其转换为整数(使用base 16转换):
bool conversionOk = false;
int value = myString.toInt(&conversionOk, 16);
if (conversionOk && myString.length() == 6)
{
// Found hex string of length 6.
}