Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
#1

Преобразовать указатель в float - C++

03.12.2013, 11:00. Просмотров 1002. Ответов 27
Метки нет (Все метки)

допустим есть такая структура
C++
1
2
3
4
5
6
7
8
9
10
11
12
    struct lol
    {
        int a;
        float b;
    } ololo;
    ololo.a = 34;
    ololo.b = 2.5;
 
    wchar_t *pt = (wchar_t*)&ololo.a;  //мне нужен такой указатель
    Label1->Caption = (int)*pt;  //выводит прекрасно
    pt++;pt++;
    Label2->Caption = (float)*pt; //выводит бред
как вывести float в таком случае? и можно ли?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 11:00     Преобразовать указатель в float
Посмотрите здесь:

double указатель и float матрица - C++
Очень срочно нужно. Есть 2-мерный массив типа float. Есть указатель на double. double *pj=NULL; float h; Как правильно...

Преобразовать строку в float - C++
Итак у меня есть переменная Char. В ней записано '5.2'. И есть переменная float. Как мне поместить 5.2 в переменную типа float ? Типа...

Преобразовать string в float - C++
Привет! Подскажите, пожалуйста, наиболее простой способ, как преобразовать значение типа string в float.

Преобразовать из float в string - C++
Скажите, пжл, какие существуют ф-ии для конвертации из float в string?

Ошибка. Невозможно преобразовать CString в float - C++
Здравствуйте! Программа заключается в следующем - пользователь добавляет в EditControl данные, нажимает на ОК, и эти данные попадают в...

На входе дробное число, которое надо преобразовать во float - C++
Здравствуйте, столкнулся со следующей проблемой: на входе дробное число которое читается из потока посимвольно (состоит из 3 знаков 3.2 ...

Как преобразовать число float в int без потери данных? - C++
Здравствуйте, форумчане. Столкнулась с такой проблемой: для работы программы требуется целое число, но вводится число типа float. Так вот,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
Заблокирован
03.12.2013, 11:06     Преобразовать указатель в float #2
Цитата Сообщение от lips Посмотреть сообщение
Label1->Caption = (int)*pt
он выводит 4-х байтовый указатель в десятичном виде (изначально был в 16-чном)

Цитата Сообщение от lips Посмотреть сообщение
Label2->Caption = (float)*pt;
а вот у флоата структура совершенно другая, у него ж какие - то байты отвечают за экспоненту, какие - то за знак и тд

лень пробовать у себя, просто попробуй так: Label2->Caption = (float)(int)*pt;
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 11:15  [ТС]     Преобразовать указатель в float #3
Цитата Сообщение от newbie666 Посмотреть сообщение
он выводит 4-х байтовый указатель в десятичном виде (изначально был в 16-чном)


а вот у флоата структура совершенно другая, у него ж какие - то байты отвечают за экспоненту, какие - то за знак и тд

лень пробовать у себя, просто попробуй так: Label2->Caption = (float)(int)*pt;
не выводит то что нужно ... (выводит 0)
ну да... непонятен мне float вообще... вроде 4 байта занимает... а значения может принимать такие же как и int
где тогда хранятся значения после точки..
palva
2563 / 1785 / 252
Регистрация: 08.06.2007
Сообщений: 6,913
Записей в блоге: 4
03.12.2013, 11:22     Преобразовать указатель в float #4
Цитата Сообщение от lips Посмотреть сообщение
Label1->Caption = (int)*pt;
Здесь pt указатель, *pt это то, на что он указывает - целое число 34. Но компилятор считает, что это указатель на wchar_t. Написав (int) мы даем знать компилятору, что на самом деле там лежит целое число.
Для плавающего надо сначала сдвинуть указатель, чтобы он указывал на область памяти после целого числа, где находится float b. Сдвинуть нужно на четыре байта. Поскольку это указатель на wchar_t, а wchar_t занимает два байта, нужно сдвинуть указатель на 2 единицы. То есть будет (float)*(pt+2).
newbie666
Заблокирован
03.12.2013, 11:23     Преобразовать указатель в float #5
Цитата Сообщение от lips Посмотреть сообщение
непонятен мне float вообще... вроде 4 байта занимает.
Ознакомься с IEEE 754-2008 по ссылке http://ru.wikipedia.org/wiki/IEEE_754-2008
А конкретно float - это одинарная точность - вот http://ru.wikipedia.org/wiki/%D0%A7%...81%D1%82%D0%B8
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 11:27  [ТС]     Преобразовать указатель в float #6
Цитата Сообщение от palva Посмотреть сообщение
Здесь pt указатель, *pt это то, на что он указывает - целое число 34. Но компилятор считает, что это указатель на wchar_t. Написав (int) мы даем знать компилятору, что на самом деле там лежит целое число.
Для плавающего надо сначала сдвинуть указатель, чтобы он указывал на область памяти после целого числа, где находится float b. Сдвинуть нужно на четыре байта. Поскольку это указатель на wchar_t, а wchar_t занимает два байта, нужно сдвинуть указатель на 2 единицы. То есть будет (float)*(pt+2).
C++
1
2
3
    Label1->Caption = (int)*pt;
    pt++;pt++;
    Label2->Caption = (float)*(pt+2);
так? выводит не то...
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
03.12.2013, 11:30     Преобразовать указатель в float #7
Label2->Caption = (float)*pt; //выводит бред
А чего вы ожидали, присваивая строке значение двоичной переменной?

*pt - это в любом случае (независимо от кастинга) - a, и никогда не - b.
newbie666
Заблокирован
03.12.2013, 11:31     Преобразовать указатель в float #8
Цитата Сообщение от lips Посмотреть сообщение
Label2->Caption = (float)*pt;
Label2->Caption = *(float*)pt;

а так?
palva
2563 / 1785 / 252
Регистрация: 08.06.2007
Сообщений: 6,913
Записей в блоге: 4
03.12.2013, 11:31     Преобразовать указатель в float #9
Цитата Сообщение от lips Посмотреть сообщение
так? выводит не то...
Виноват, был не прав. Не заметил, что в третьей строчке вы указатель уже сдвинули. По моему так должно быть.
C++
1
2
3
    Label1->Caption = (int)*pt;
    pt++;pt++;
    Label2->Caption = (float)*pt;
А что здесь не в порядке с выводом?
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 11:33  [ТС]     Преобразовать указатель в float #10
Цитата Сообщение от gazlan Посмотреть сообщение
А чего вы ожидали, присваивая строке значение двоичной переменной?

*pt - это в любом случае (независимо от кастинга) - a, и никогда не - b.
поля структуры в памяти идут друг за другом... как и в массиве элементы массива
не надо путать меня и остальных пожалуйста
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,653
03.12.2013, 11:34     Преобразовать указатель в float #11
а вот так вот нельзя разве?
C++
1
2
int * a=&ololo.a;
float * b =&ololo.b;
зачем здесь адресная арифметика?
зачем приведения к разным типам?
newbie666
Заблокирован
03.12.2013, 11:34     Преобразовать указатель в float #12
чё молчишь? как в моём посте номер 8 правильно выводит же ?
ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,653
03.12.2013, 11:35     Преобразовать указатель в float #13
Цитата Сообщение от lips Посмотреть сообщение
поля структуры в памяти идут друг за другом...
есть такая штука как выравнивание и не всегда они идут друг за другом, могут быть и "дыры"
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 11:36  [ТС]     Преобразовать указатель в float #14
Цитата Сообщение от palva Посмотреть сообщение
Виноват, был не прав. Не заметил, что в третьей строчке вы указатель уже сдвинули. По моему так должно быть.
C++
1
2
3
    Label1->Caption = (int)*pt;
    pt++;pt++;
    Label2->Caption = (float)*pt;
А что здесь не в порядке с выводом?
ну выводит не то, если значение в b = 2.5 то выводит 0 .... если 1.2 то 39322
palva
2563 / 1785 / 252
Регистрация: 08.06.2007
Сообщений: 6,913
Записей в блоге: 4
03.12.2013, 11:40     Преобразовать указатель в float #15
Цитата Сообщение от gazlan Посмотреть сообщение
А чего вы ожидали, присваивая строке значение двоичной переменной?
Если у ТС с-builder, то нужно еще IntToStr применять. Но ТС утверждает, что у него и без этого целое выводится правильно. Так что не знаю, может он где-то операцию = перегрузил...

Добавлено через 4 минуты
Цитата Сообщение от lips Посмотреть сообщение
ну выводит не то, если значение в b = 2.5 то выводит 0 .... если 1.2 то 39322
Вы лучше скажите, у вас Builder или что? Сишный программист обитаемый на этом форуме понятия не имеет о том, как выводить на Label2->Caption.
Целые числа разве у вас правильно выводит?
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 11:45  [ТС]     Преобразовать указатель в float #16
Цитата Сообщение от newbie666 Посмотреть сообщение
Label2->Caption = *(float*)pt;

а так?
Цитата Сообщение от newbie666 Посмотреть сообщение
чё молчишь? как в моём посте номер 8 правильно выводит же ?
прошу прощения не заметил, правильно) спасибо

Добавлено через 2 минуты
Цитата Сообщение от palva Посмотреть сообщение
Если у ТС с-builder, то нужно еще IntToStr применять. Но ТС утверждает, что у него и без этого целое выводится правильно. Так что не знаю, может он где-то операцию = перегрузил...

Добавлено через 4 минуты

Вы лучше скажите, у вас Builder или что? Сишный программист обитаемый на этом форуме понятия не имеет о том, как выводить на Label2->Caption.
Целые числа разве у вас правильно выводит?
rad studio 10
да всё правильно выводит... только проблема была с float
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
03.12.2013, 11:47     Преобразовать указатель в float #17
Цитата Сообщение от lips Посмотреть сообщение
не надо путать
Путаетесь только вы. Перечитайте и вникните.
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
03.12.2013, 11:50  [ТС]     Преобразовать указатель в float #18
Цитата Сообщение от ValeryS Посмотреть сообщение
а вот так вот нельзя разве?
C++
1
2
int * a=&ololo.a;
float * b =&ololo.b;
зачем здесь адресная арифметика?
зачем приведения к разным типам?
просто мне надо вывести очень очень много структур... с очень очень большим кол-вом полей и ещё + структуры в структуре, и тд...
мне проще будет создать массив указателей на начало каждой структуры(что я и сделал циклом) и вывести таким образом все
palva
2563 / 1785 / 252
Регистрация: 08.06.2007
Сообщений: 6,913
Записей в блоге: 4
03.12.2013, 12:03     Преобразовать указатель в float #19
Цитата Сообщение от lips Посмотреть сообщение
только проблема была с float
Возможно, у вас операция = с float не перегружена. Попробуйте использовать тип double.

Добавлено через 3 минуты
Цитата Сообщение от lips Посмотреть сообщение
просто мне надо вывести очень очень много структур...
Не используйте ваш кастинг в рабочей программе. В такой программе потом невозможно будет разобраться. Пишите проще.

Добавлено через 4 минуты
Указатель должен быть на структуру, а не на элемент структуры.
C++
1
2
3
4
5
6
7
8
9
10
    struct lol
    {
        int a;
        float b;
    } ololo, *pt;
    ololo.a = 34;
    ololo.b = 2.5;
 
    Label1->Caption = pt->a;
    Label2->Caption = pt->b;
Добавлено через 4 минуты
Я бы даже так написал последнюю строчку
C++
1
    Label2->Caption = FloatToStr(pt->b);
Но настаивать не буду - мне негде проверить этот код.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 12:04     Преобразовать указатель в float
Еще ссылки по теме:

Как преобразовать все int,float,double в строки LPWSTR, LPCTSTR - C++
Столкнулся с проблемой не как не переведу в нормальный вид вот код #include <iostream> #include <Windows.h> #include...

Как явно преобразовать указатель? - C++
Здравствуйте! Изучая возможности наследования столкнулся со следующим утверждением: "Если для объекта производного класса объявить...

Указатель на указатель - разница способов - C++
int a =5; int *b = &a; int **e =&b; //первый способ //Нужно писать столько * скока указателей.. int *f = b; //Втрой...

Преобразование в указатель на указатель на константу - C++
В упор не могу понять правила которые приводит Дьюхерст для преобразований "многоуровневых" указателей. (Дьюхерст "Скользкие места...

Задача на указатели.Указатель на указатель. - C++
Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали равны 0, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
03.12.2013, 12:04     Преобразовать указатель в float #20
Цитата Сообщение от palva Посмотреть сообщение
Указатель должен быть на структуру, а не на элемент структуры.
Можно, с осторожностью: offsetof
Yandex
Объявления
03.12.2013, 12:04     Преобразовать указатель в float
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru