Re[4]: Hex string to value
От: chpunteg  
Дата: 28.10.10 22:01
Оценка:
Здравствуйте, 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
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.