Итак, у меня есть две шестнадцатеричные строки — "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 ++, но он дает мне одинаковое значение для двух разных шестнадцатеричных строк. Зачем?
Вы должны начать с читая справочную страницу. Это возвращается LONG_MAX
так как ваш ввод слишком велик, чтобы поместиться в long
,
Также, strtol()
это очень C-образный способ, и вы программируете на C ++.
Вы не используете 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.
}