Повідомлення створено: 23. 03. 2018 [11:23]
|
LeDima
Дима Лещев
Автор теми
Зареєстрован(а) с: 26.05.2015
Повідомлення: 6
|
В версии LTS(приблизительно 2016г-2017г) и рабочей из Живого диска 0.9-r2537 работает по разному.
В LTS нормально преобразует 32-разрядное знаковое шестнадцатеричное число(строка) в знаковой десятеричное.
В Рабочей с Живого диска 0.9-r2537 разрядность стала 64? и при этом не преобразует в отрицательные числа
"7FFFFFFFFFFFFFFE".toInt(16) ----> 9223372036854775806
"7FFFFFFFFFFFFFFF".toInt(16) ----> 9223372036854775807
"8000000000000000".toInt(16) ----> 9223372036854775807
"8FFFFFFFFFFFFFFF".toInt(16) ----> 9223372036854775807
"FFFFFFFFFFFFFFFF".toInt(16) ----> 9223372036854775807
Это баг, фича или так и должно быть?
|
Повідомлення створено: 23. 03. 2018 [12:02]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"LeDima" wrote:
Это баг, фича или так и должно быть?
Это объективное различие в эволюции рабочей ветви и ветви продолжительной поддержки.
По факту целое в 0.8 LTS было 32-разрядным и остаётся таким для совместимости!
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 23. 03. 2018 [12:20]
|
LeDima
Дима Лещев
Автор теми
Зареєстрован(а) с: 26.05.2015
Повідомлення: 6
|
Это значит что в рабочей версии необходимо создавать свою функцию которая правильно преобразует строку?
И в отрицательные значения .toInt() в рабочей версии не преобразует?
[Повідомлення редагувалось 1 раз(ів), останній раз 23.03.2018 в 12:33.]
|
Повідомлення створено: 23. 03. 2018 [12:48]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"LeDima" wrote:
Это значит что в рабочей версии необходимо создавать свою функцию которая правильно преобразует строку?
И в отрицательные значения .toInt() в рабочей версии не преобразует?
Причём тут отрицательное в шестнадцатеричном представлении, не говоря уже о том, что сама эта функция никаких преобразований не делает, а делает системная.
Исходники смотрите сначала и читайте про strtoll(), где кстати перед шестнадцатеричным можно знак поставить.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 23. 03. 2018 [14:59]
|
LeDima
Дима Лещев
Автор теми
Зареєстрован(а) с: 26.05.2015
Повідомлення: 6
|
Ну как причем, старший разряд числа показывает знак.
В общем посмотрел в исходниках
return (int)strtol(vl.getS().c_str(),NULL,(prms.size()>=1?prms[0].getI():0)); в LTS
return (int64_t)strtoll(vl.getS().c_str(), NULL, (prms.size()>=1?prms[0].getI():10)); в Рабочей
Разница в применяемых функциях и какому типу преобразовать...
Но в LTS версии старший разряд учитывается и преобразовывается к отрицательным значениям а в рабочей почему то нет.
|
Повідомлення створено: 23. 03. 2018 [15:21]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
"LeDima" wrote:
Но в LTS версии старший разряд учитывается и преобразовывается к отрицательным значениям а в рабочей почему то нет.
Чего Вы сюда пишете? Напишите в GLibC, если это Вас как-то не устраивает!
Меня-же всё устраивает.
Learn, learn and learn better than work, work and work.
|