Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2013, 12:43   #1
Kulgar
 
Регистрация: 09.08.2013
Сообщений: 7
По умолчанию C++ Builder 6.0 - преобразование hex данных с компорта в вещественное число двойной точности

Доброго всем времени суток.
Данные с компорта записываю во временный буфер
Код:
queue <unsigned char> TmpBuffer;
По логике в переменную типа указатель на double надо записать адрес 1го элемента очереди.
Код:
double *psev;
*psev= &TmpBuffer.front();
Но компилятор нивкакую не хочет это делать. Подскажите пожалуйста, как можно получить вещественное число, не переходя на побитовую обработку?
Kulgar вне форума Ответить с цитированием
Старый 09.08.2013, 13:28   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Наверно все-таки так:
double *psev;
psev= (double*) &TmpBuffer.front();

А вы уверены, что queue<> располагает елементы последовательно в памяти?
waleri вне форума Ответить с цитированием
Старый 09.08.2013, 15:41   #3
Kulgar
 
Регистрация: 09.08.2013
Сообщений: 7
По умолчанию

В том то и дело, что не уверен.

Нашёл такой вариант:
Код:
const char *s;
double ret;
sscanf(s, "%llx", (unsigned long long *)&ret);
Но как-то он не корректно работает. Все числа получаются в степени <-300.
Kulgar вне форума Ответить с цитированием
Старый 09.08.2013, 18:22   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Потому что читаете из неинициализированного указателя и потому что читаете не тот тип данных.
waleri вне форума Ответить с цитированием
Старый 12.08.2013, 15:16   #5
Kulgar
 
Регистрация: 09.08.2013
Сообщений: 7
По умолчанию

Для 8ми байт нашёл такое решение:
Код:
String St = "0x4DBD29C240A4E63F";
__int64 kk = StrToInt64(St) ;
MainForm->Memo1->Lines->Add(FloatToStrF(kk,ffExponent,14,2));
Но теперь нужно для 10 байт.
Инициализировал указатель. Тип привёл.
Код:
const char *s;
s="0x0080dcb21c4af4f2";
long double ret;
sscanf(s, "%L", (long double *)&ret);
Не работает.

Даже и не знаю, что ещё сделать.

Последний раз редактировалось Kulgar; 12.08.2013 в 15:29.
Kulgar вне форума Ответить с цитированием
Старый 12.08.2013, 17:37   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Проверить что именно читает %L - после L не должна быть еще буква?
waleri вне форума Ответить с цитированием
Старый 12.08.2013, 17:57   #7
Kulgar
 
Регистрация: 09.08.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Проверить что именно читает %L - после L не должна быть еще буква?
Что именно читает %L как проверить не знаю. В ret записывается 0.
Зависит от компилятора нужно что-нить после L или нет. Я испробовал все комбинации: %Lf, %lf, %llf... Результат тот же: 0.
Kulgar вне форума Ответить с цитированием
Старый 12.08.2013, 19:58   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

А, похоже формат строки не тот. Попрубуйте s = "123.45"...
Если вам надо обязательно 0x то тогда скорее всего придется самому читать байт за байтом.
waleri вне форума Ответить с цитированием
Старый 13.08.2013, 11:58   #9
Kulgar
 
Регистрация: 09.08.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А, похоже формат строки не тот. Попрубуйте s = "123.45"...
Если вам надо обязательно 0x то тогда скорее всего придется самому читать байт за байтом.
Задача в том и заключается - получить число в виде "123.45".
Байт за байтом я пробовал читать в очередь. В 1м посте описано. Подскажите, какие есть альтернативы?
Kulgar вне форума Ответить с цитированием
Старый 13.08.2013, 12:02   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Нет, в смысле самому конвертить байт за байтом в буфер.
0х11223344
11 читаем в первый байт, 22 во второй, 33 в третий и так далее.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование string в HEX-число в формате int64 calypso Общие вопросы C/C++ 5 11.04.2013 15:36
Даны вещественное число a и натуральное число n. Вычислить S Dimaska931 Паскаль, Turbo Pascal, PascalABC.NET 6 28.11.2012 12:09
Дано вещественное число X и целое число N (> 0). Вывести X – X3/3! + X5/5! – ... + (–1)NX2N+1/(2N+1)!? Ахилес Помощь студентам 2 20.05.2010 20:34
Преобразование даты в вещественное число nova-alex Общие вопросы Delphi 5 03.05.2007 10:51