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

Jar*_*ice 3 qstring qt hex

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

RA.*_*RA. 12

您有两种选择:

使用QRegExp

使用QRegExp该类创建一个正则表达式,找到您要查找的内容.在你的情况下,像下面这样的东西可能会做到这一点:

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

更新

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.
}
Run Code Online (Sandbox Code Playgroud)

仅使用QString

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

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