strtol дает одинаковый ответ для двух разных шестнадцатеричных строк

Итак, у меня есть две шестнадцатеричные строки — "3b101c091d53320c000910" а также "071d154502010a04000419", Когда я использую strtol() на них я получаю одинаковое значение для обеих строк.

Я попробовал следующий код

    string t1="3b101c091d53320c000910";
long int hext1=strtol(t1.c_str(),0,16);
string t2="071d154502010a04000419";
long int hext2=strtol(t2.c_str(),0,16);
cout<<hext1<<endl;
cout<<hext2<<endl;

Оба дают мне одинаковую ценность: 9223372036854775807,

Я не знаю, как именно работает strtol (), так как я новичок в C ++, но он дает мне одинаковое значение для двух разных шестнадцатеричных строк. Зачем?

0

Решение

Вы должны начать с читая справочную страницу. Это возвращается LONG_MAX так как ваш ввод слишком велик, чтобы поместиться в long,

Также, strtol() это очень C-образный способ, и вы программируете на C ++.

5

Другие решения

Вы не используете strtol правильно. Вы должны установить errno в
0 перед вызовом, и проверьте, что это все еще 0 после;
в противном случае он будет содержать код ошибки (который может быть отображен
с помощью strerror). Кроме того, вы должны передать его адрес
char const*, так что вы можете убедиться, что он обработал
вся строка (в противном случае, "abc" вернет 0, без
ошибка):

errno = 0;
char const* end;
long hext1 = strtol( t1.c_str(), &end, 16 );
if ( errno != 0 || *end != '\0' ) {
//  Error occured.
}
0

По вопросам рекламы [email protected]