Название: Проблема с преобразованием hex -> int Отправлено: puh от Август 12, 2014, 11:04 Добрый день всем.
Столкнулся с проблемой преобразования из hex в int. Код: Код: QString str = "FFFFFFF5"; Код: 0 false Подскажите, плз, как заставить программу правильно преобразовывать подобные знаковые hex-значения? Название: Re: Проблема с преобразованием hex -> int Отправлено: gil9red от Август 12, 2014, 11:22 "FFFFFFF5" = 4 294 967 285
int = от -2147483648 до 2147483647 Используйте toULong или toLongLong ;) Название: Re: Проблема с преобразованием hex -> int Отправлено: puh от Август 12, 2014, 11:40 А как же тогда такой код:
Код: qDebug() << QString::number(-11, 16); Код: "fffffffffffffff5" Проблема получается в том, что программа не понимает, что перед ней отрицательное число, и она старший разряд (равный 1) не воспринимает как знаковый разряд. Но как же ей тогда это подсказать?? Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 11:45 Код: bool t; Название: Re: Проблема с преобразованием hex -> int Отправлено: puh от Август 12, 2014, 11:51 Код: bool t; Спасибо. Принцип понятен. НО почему так через ж.. приходится? Получается, что проще этого не сделать, т.е. сразу из строки в "-11" (-15, -111)? Название: Re: Проблема с преобразованием hex -> int Отправлено: Пантер от Август 12, 2014, 12:06 Извращенцы. ;D
Код
Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 12:10 Ещё
Код: QByteArray arr("\xF5\xFF\xFF\xFF", 4); Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 12:14 Извращенцы. ;D Я не силён в ухищрениях, но почему компилятор не ругается на преобразование типа? Вдруг я там ошибся?Код
Почему я в цикле for когда сравниваю int и uint, происходят предупреждения, а тут нет? Название: Re: Проблема с преобразованием hex -> int Отправлено: puh от Август 12, 2014, 12:16 Извращенцы. ;D Код
Это уже по-божески, хотя тоже из разряда "кручу-верчу нае.. хочу". Спасибо всем за помощь. Название: Re: Проблема с преобразованием hex -> int Отправлено: Пантер от Август 12, 2014, 12:17 Извращенцы. ;D Я не силён в ухищрениях, но почему компилятор не ругается на преобразование типа? Вдруг я там ошибся?Код
Почему я в цикле for когда сравниваю int и uint, происходят предупреждения, а тут нет? Название: Re: Проблема с преобразованием hex -> int Отправлено: Пантер от Август 12, 2014, 12:18 Ещё Фтопку твой memcpy, ты на плюсах пишешь или где?Код: QByteArray arr("\xF5\xFF\xFF\xFF", 4); Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 12:28 Блин. Никак не укладывается в голове. Это какое-то из волшебств const.
Можно и так даже Код: float result = static_cast<const float>(str.toUInt(&t, 16)); Название: Re: Проблема с преобразованием hex -> int Отправлено: Igors от Август 12, 2014, 12:29 Я не силён в ухищрениях, но почему компилятор не ругается на преобразование типа? Вдруг я там ошибся? Проблемы возможны на сравнении, а присвоение/инициализация безопасны Почему я в цикле for когда сравниваю int и uint, происходят предупреждения, а тут нет? В Qt сделано нормально, нужно задавать знак явно (а не делать предположения), напр Код
Название: Re: Проблема с преобразованием hex -> int Отправлено: Igors от Август 12, 2014, 12:35 Блин. Никак не укладывается в голове. Это какое-то из волшебств const. Ну а const здесь зачем? :) Здесь уже будет перевод во флоат. А при int/uint никаких конверсий не происходит, их биты совершенно равны, напрМожно и так даже Код: float result = static_cast<const float>(str.toUInt(&t, 16)); Код
Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 12:57 Всё понял. Ключевой фразой было
присвоение/инициализация безопасны Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 13:02 Я не силён в ухищрениях, но почему компилятор не ругается на преобразование типа? Вдруг я там ошибся? Проблемы возможны на сравнении, а присвоение/инициализация безопасны Почему я в цикле for когда сравниваю int и uint, происходят предупреждения, а тут нет? В Qt сделано нормально, нужно задавать знак явно (а не делать предположения), напр Код
-F5 дает -245 Название: Re: Проблема с преобразованием hex -> int Отправлено: Igors от Август 12, 2014, 13:17 -F5 дает -245 Правильно дает -(15 * 16 + 5) = -245Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 13:27 Я не вижу способа получения -11 из FFFFFFF5 этим методом.
Название: Re: Проблема с преобразованием hex -> int Отправлено: Old от Август 12, 2014, 13:34 Я не вижу способа получения -11 из FFFFFFF5 этим методом. 0x100000000 - 0xFFFFFFF5 = 0x0B (11)Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 13:36 Я не вижу способа получения -11 из FFFFFFF5 этим методом. 0x100000000 - 0xFFFFFFF5 = 0x0B (11)Название: Re: Проблема с преобразованием hex -> int Отправлено: Old от Август 12, 2014, 13:41 Согласен, только это не позволит красиво записать решение в одну строчку. Про какое решение речь?Название: Re: Проблема с преобразованием hex -> int Отправлено: __Heaven__ от Август 12, 2014, 13:47 Перевод QString("FFFFFFF5")
Название: Re: Проблема с преобразованием hex -> int Отправлено: Old от Август 12, 2014, 14:21 Перевод QString("FFFFFFF5") Уже же все написали. Если вы хотите получить число со знаком, то и использовать нужно число со знаком.Название: Re: Проблема с преобразованием hex -> int Отправлено: manarch от Август 13, 2014, 09:20 Добрый день всем. Столкнулся с проблемой преобразования из hex в int. Код: Код: QString str = "FFFFFFF5"; Код: 0 false Подскажите, плз, как заставить программу правильно преобразовывать подобные знаковые hex-значения? Код
ЗЫ: без "0x" не прокатывает! |