2013-03-16 3 views
-1

У меня есть две строки с целым числом (например, строка strInt = "100") и одна с шестнадцатеричным номером (например, строка strHex = "0x64"). Каков самый быстрый/хороший/безопасный способ сравнения, если значения strInt и strHex равны (численно)?Самый простой способ сравнить строку, содержащую целое число, с строкой, содержащей шестнадцатеричный

Необходимо исключить Sprintf, чтобы предотвратить переполнение буфера Рекомендуем также не могу использовать snprintf - мой компилятор не поддерживает C++ 11

Спасибо всем заранее

+0

критическая информация здесь является количество цифр, и вы оставили, что из –

+0

Конечно, это должно быть сделано в C++ :) – marcin

+0

Формат гекс 0xyyyyy - так 5 цифр – marcin

ответ

2

Использование strtol для преобразования как в целое, а затем сравнить их. Вы можете использовать strHex.c_str() для преобразования из строки C++ в строку c-стиля, требуемую strtol.

Пример:

long int numHex = strtol(strHex.c_str(),NULL,16); // 16 is the base of the source 

long int numInt = strtol(strInt.c_str(),NULL,10); 
+0

+1 разумное решение –

3

Я не вижу, как функция sprintf() или snprintf() потребовалось бы для этого.

std::string a = "1337"; 
std::string b = "0x539"; 

std::stringstream as; 
as.str(a); 
std::stringstream bs; 
bs.str(b); 

int na, nb; 
as >> na; 
bs >> std::hex >> nb; 

std::cout << a << " is " << (na == nb ? "equal" : "not equal") << " to " << b << std::endl; 
+0

Я думал о том, чтобы делать это таким образом - но это оптимально? Похоже, потребуется много памяти для создания двух строк, чтобы сравнить два числа ??? – marcin

+1

@marcin Посмотрите, как ответ, предполагающий использование 'strtol()', будет скоро ограниченным: P Если у вас хороший оптимизирующий компилятор, это не должно быть проблемой, и использование кода на C++ обычно предпочтительнее использования C, когда вы пишете что-то на C++. –

+0

@ H2CO3 Помогите объяснить, почему? (Я честно не знаю, не предложил бы это иначе) –