如果我有两个std :: strings包含一个任意长度的十六进制值,我怎么能比较两个看看哪个值更大?理想情况下,我希望避免使用大量的库。
我想做点什么:
if(hex1 > hex2)
{
//Do something
}
答案 0 :(得分:2)
您可以对这些数字进行字符串比较,但有几个潜在的问题需要考虑:
考虑所有这些条件及其潜在的组合将是一个真正的头痛。 C ++ 11引入了类型unsigned long long int
,它至少是一个64位无符号整数。如果你的输入超过了那个不起作用,你将需要解析字符串。
if(stoll(hex1, 0, 16) > stoll(hex2, 0, 16)
答案 1 :(得分:0)
首先修剪前导零。
如果长度不等,则长度越大。
如果长度相等,则从头开始循环并比较每个数字。无论哪个字符串首先在相同位置具有较大数字而另一个字符串较大。 如果到达最后且所有数字相等,则值相等。
答案 2 :(得分:0)
如果您使用std::string
。适用于ASCII编码。
bool hex_greater(std::string &first, std::string &second)
{
/* Comprasions based on size */
int firstSize = first.size();
int secondSize = second.size();
if(firstSize > secondSize)
return true;
else if(firstSize < secondSize)
return false;
/* Convert to lower case, for case insentitive comprasion */
std::transform(first.begin(), first.end(), first.begin(), ::tolower);
std::transform(second.begin(), second.end(), second.begin(), ::tolower);
/* Call the std::string operator>(...) which compare strings lexicographically */
if(first > second)
return true;
/* In other cases first hex string is not greater */
return false;
}