Здравствуйте, Were, Вы писали:
W>А функция считает, что это положительное значение, которое не влезает в signed long. Формат входной строки описан в документации к функции кстати, и знак минуса там нужно указывать явно.
W> кто сказал, что функция _ltot обратная для _tcstol? В документации к _ltot сказано, что знак минус ставится только для десятичной базы, а в _tcstol он должен быть указан явно для всех.
да, уже увидел... спасибо.
W>В общем используй _tcstoul и преобразуй unsigned в signed.
в первом посте так сделал...
ЗЫЖ
Нет, я понимаю почему она так конвертит. Сразу понял.
Но до сих пор был уверен, что RTL'ные ф-ции конвертации взаимообратны:
atoi <-> itoa
_ltot <-> _tcstol
_ultot <-> _tcstoul
_i64tot <-> _tcstoi64
...
а оказалось — не всегда
Было удивлен, получив на вызов checkLongStrLong(E_INVALIDARG) значение false
bool checkLongStrLong(long val) {
TCHAR sz[9];
return _tcstol(_ltot(val, sz, 16), NULL, 16) == val; // convert signed -> string -> signed
}