如何正确检查std :: string是否是C ++上有效的MD5十六进制哈希?
请记住,我想避免循环,我不能使用boost库,也不能使用C ++ 11中的正则表达式。
答案 0 :(得分:2)
这样做:
if (value.size() == 32 && value.find_first_not_of("0123456789abcdefABCDEF") == -1)
或者,因为cluracan在评论中提及isxdigit
,这可能会更快:
if (value.size() == 32 && std::find_if(value.begin(), value.end(), [](char c) { return !std::isxdigit(static_cast<unsigned char>(c)); }) == value.end())
答案 1 :(得分:1)
请记住,MD5是128位值,即16字节。为方便起见,它通常用32char十六进制字符串编写。
如果你不需要'看'你的md5值 - 保持16bytes - 这样你就不需要任何像std :: string这样的花哨结构来存储它。只需16个字节的数组。您不必验证它,因为您可以存储在16字节数组中的所有内容也是有效的MD5值; - )