Вы можете сделать сравнение строк на эти числа, но есть несколько потенциальных проблем, которые должны были бы быть учтены:
- сигнальным знаком символа («+ 0x2A» будет заказано до «0x0D»)
- существование «0x» («0x2a» будут заказаны до «0D»)
- капитализация «0x» («0x2a» будут заказаны до «0x0D»)
- капитализация шестнадцатеричных цифр ("0X0 D»будет заказан до„0x0A“)
- Нулевой обивки чисел („0X002A“будет заказан до„0x0D“)
Рассмотрения всех этих условий и их возможных комбинаций будет настоящей головной болью , В C++ 11 был введен тип unsigned long long int
, который представляет собой по меньшей мере 64-разрядное целое число без знака. Это дает вам колоссальные 16 шестнадцатеричных символов ввода, если ваш вход длиннее, чем это не будет работать, и вам придется разбирать строку.
if(stoll(hex1, 0, 16) > stoll(hex2, 0, 16)
Являются ли значения без знака или подписанными? – lcs
Вы можете просто прочитать их как целое: std :: cin >> std :: hex >> hex1 >> hex2, чтобы читать их как шестнадцатеричные целые числа, а затем сравнивать их нормально. –
Если строки содержат только [0-9], [a-f] или [A-F] делают их в нижнем регистре (или в верхнем регистре) и сравниваются так же, как и вы (если они имеют одинаковую длину). –