|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.02.2011, 08:19 | #1 |
DI HALT RET
Форумчанин
Регистрация: 30.12.2010
Сообщений: 117
|
Double to __int64
Здравствуйте знатоки.
Столкнулся с такой проблемой: Необходимо написать аналогичную прогу, по проге явы. Т.е. есть декомпиленый исходник явы, а пишу я на MS VC++. Проблема же заключается в переводе double в int64 формат, чтобы потом запихнуть это дело в пакет и отправить серверу. Код явы: Код:
Делаю тоже самое на С++ или просто: Код:
На яве перевернутое: 0x40490000 00000000 Где то я ошибочку допустил или как то переводится по другому? Помогите решить. Пробовал методом тыка выяснить как он хранит. Сделал 0x4a40 и получил число 52 p.s.: порылся в msdn и нашел функцию : Код:
Спасибо Последний раз редактировалось Tahoma; 04.02.2011 в 10:29. |
04.02.2011, 11:11 | #2 |
Линуксоид
Участник клуба
Регистрация: 31.07.2009
Сообщений: 1,403
|
1) Конвертируй при помощи static_cast. Приведение типов в стиле C это плохо.
Приведение типов в стиле C плохо по следующим причинам. Во-первых, это может быть static_cast, reinterpret_cast, и const_cast (или несколько одновременно). Мало того, C-style cast может положить программу во время рантайма в том случае, когда на плохой C++ каст компилятор ругнулся бы при компиляции (например, при касте в приватного предка). В-третьих, C-style cast сложнее искать в исходнике, что автоматически, что глазами. 2) Используй int32_t/int64_t. У них размер гарантирован, в отличие от long long и т.п.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su Последний раз редактировалось Obey-Kun; 04.02.2011 в 11:21. |
04.02.2011, 12:18 | #3 | |
DI HALT RET
Форумчанин
Регистрация: 30.12.2010
Сообщений: 117
|
Даже со static_cast число 50 по любому равно 0x32. Почему же в яве получается 0x4940? Может все дело в функции doubleToLongBits? Есть ли пример какой-нибудь как её использовать? Точнее как ей пользоваться я в msdn нашел, но какую библиотеку подгрузить, чтобы её компилятор видел не знаю
Цитата:
Спасибо, что подсказал. Ошибка и правда затоилась в неправельном переводе из double в int(long). Сделал без перевода. Просто дописал кусочек кода, чтобы сразу double число пихало в пакет... и ура Последний раз редактировалось Stilet; 04.02.2011 в 14:49. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
E2015 Ambiguity between 'std::log(double)' and 'std::log(long double)' | Namolem | Помощь студентам | 3 | 02.04.2011 20:22 |
функция pow(double x, double y) Не могу понять в чем ошибка | Vlashel | Помощь студентам | 3 | 07.10.2010 16:28 |
String to double ? | NiCola999 | Общие вопросы C/C++ | 3 | 14.03.2010 12:21 |
long double vs. double | VoidMan | Общие вопросы C/C++ | 1 | 21.09.2009 18:45 |
Double/? | Viteef | Общие вопросы Delphi | 6 | 25.07.2007 02:28 |