Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
51 / 50 / 14
Регистрация: 17.11.2012
Сообщений: 427
1

Как сохранить float в переменной типа char?

01.05.2016, 20:43. Показов 9338. Ответов 76
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здрасьте.
Как можно записать float в char ?
И как потом float вытащить из char, если он будет находится примерно посередине ну или в начале?

C++
1
2
3
4
5
6
7
8
float x;
char str[100]
// Запих x в str
//...
// Вытащить float ?
str[0-40] = // ... 
str[41] = //  если я знаю, что float начинается с 41 символа, к примеру
str[45-99] = //....
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2016, 20:43
Ответы с готовыми решениями:

Как присвоить значение одного из элементов массива типа char переменной типа int?
С++ начал буквально только что так что буду благодарен за терпение и понимание ) Сразу оговорюсь...

Как сохранить массив типа float в файл, и считать его оттуда?
Есть массив: int *vfile=new int; 1. как можно сохранить его в файл типа .rle 2. в массиве k...

Преобразование массива типа char в массив типа float
Хорош ли следующий способ преобразования массива типа char в массив типа float? #include...

Как сохранить нажатую клавишу в переменную типа char?
Как сохранить нажатую клавишу в переменную типа char?

76
HighPredator
04.05.2016, 14:57     Как сохранить float в переменной типа char?
  #61

Не по теме:

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Как молятся С++ программисты
Как молятся не знаю, но как крестятся -- знаю: с севера на юг, затем с запада на восток. Два раза.

0
castaway
04.05.2016, 22:24
  #62

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
При кастинге всегда создаётся временный объект.
Я могу поспорить с этим, но, если честно, у меня нет никакого на это настроения... Если есть сильное желание - говорите, но быстрого ответа не ждите.

0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.05.2016, 18:20 63
Цитата Сообщение от vxg Посмотреть сообщение
зачем мне кастить если то что я получу не работает)?
что б работало, нужно либо пасти алиасинг,
либо не говнокодить иметь привычки кастить теплое к мягкому

Цитата Сообщение от vxg Посмотреть сообщение
как я понял это только для временных переменных?
ну, скажем так: не только.

однако я лично ни разу не сталкивался с другими случаями.
хотя если почтитать статьи про поломки алиасинга,
то там можно найти самые разные примеры.
не только с временными.

Цитата Сообщение от vxg Посмотреть сообщение
а если это было некое выражение где я ожидая от компилятора эквивалентности того что записано тому что я имею ввиду написал некий каст - это краш?
если вы свои эквивалентности в чаровых буферах держали - жить будет.
если не в чаровых - ну чо поделаешь... уб - такое уб

Цитата Сообщение от IGPIGP Посмотреть сообщение
Возврат локальной ссылки - тяжкий грех.
в примере с враппером нет места возврату локальной ссылки.
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
06.05.2016, 21:16 64
Цитата Сообщение от hoggy Посмотреть сообщение
в примере с враппером нет места возврату локальной ссылки.
Это я потом уже понял (вру, - так и не понял). Я не понял на что ссылается ссылка. Переменной нет, а ссылка без переменной как Пьер без ухов. Без обоих, причем.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.05.2016, 22:27 65
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это я потом уже понял (вру, - так и не понял). Я не понял на что ссылается ссылка. Переменной нет, а ссылка без переменной как Пьер без ухов. Без обоих, причем
как бе в этом суть одной из поломок алиасинга:
- видишь суслика? а он есть.
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
06.05.2016, 22:31 66
Цитата Сообщение от hoggy Посмотреть сообщение
как бе в этом суть одной из поломок алиасинга
В данном примере, конкретно, возвращается ссылка без переменной. Случай локальной ссылки очень экзотический и интересный. Я поставил плюс от всей души, так как увидел и задумался о таком впервые. Такой возврат не запускает механизм копирования и на что ссылается такая ссылка знает один компилятор.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.05.2016, 22:45 67
Цитата Сообщение от IGPIGP Посмотреть сообщение
возвращается ссылка без переменной.
возвращается ссылка которая нацелена на объект,
который живет в чаровом хранилище.

поскольку, после выполнения функции,
хранилище продолжает жить,
то и ссылка получается валидной,
и указывать на живой объект.

здесь нет места "мутным темам".
все оч прозрачно.
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
06.05.2016, 23:10 68
Цитата Сообщение от hoggy Посмотреть сообщение
возвращается ссылка которая нацелена на объект,
А он там живёт? Или там размещена информация в формате данных объекта (или нет но есть надежда их так интерпретировать). Вообще, когда говорят о ссылках никто не рискует конкретизировать вопрос её связи с... объектом сущностью размещённой в памяти. Я согласен, что эта сущность не локальна. Но как я понял (если правильно понял) в цепочке чар лежит переменная одного типа, а ссылка - на переменную другого. Но нет такой переменной. Не хочу спорить.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.05.2016, 23:21 69
Цитата Сообщение от IGPIGP Посмотреть сообщение
А он там живёт? Или там размещена информация в формате данных объекта (или нет но есть надежда их так интерпретировать). Вообще, когда говорят о ссылках никто не рискует конкретизировать вопрос её связи с... объектом сущностью размещённой в памяти. Я согласен, что эта сущность не локальна. Но как я понял (если правильно понял) в цепочке чар лежит переменная одного типа, а ссылка - на переменную другого. Но нет такой переменной. Не хочу спорить.
__________________
мы просто возвращаем ссылку на объект,
который живет "где-то" в памяти.

в данном случае - в чаровом массиве.
0
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
06.05.2016, 23:33 70
Цитата Сообщение от hoggy Посмотреть сообщение
мы просто возвращаем ссылку на объект,
который живет "где-то" в памяти.
В данном примере я увидел что-то нездешнее, согласен. Наслушавшись про "несовместимые" указатели я подумал что объект в char[] создан как один тип, а ссылка - на другой. Сейчас вижу, что память заселена plaсement new и приведение указателя на массив чар к этому типу не кажется ничем крамольным. Тогда, не вижу в чём проблема. То есть не понимаю, чем указатель - локальная переменная p лучше чем временный и созданный при приведении.
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
07.05.2016, 07:48 71
hoggy, да уж... Дальше некуда как все оч прозрачно. Знаете, мне кажется что все это затащили в стандарт дабы донести баги оптимизаторов до народа - это именно баги иного названия я не могу придумать - все операции легальны в терминах которые я читал в букварях. Если они теперь играют с терминами, то я пас.
1
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
07.05.2016, 10:14 72
vxg, я глядя на пример подумал о чём-то таком:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
template<class S, class T> struct mad_caster
{
    mad_caster(const S& src)
    {
        if(sizeof(S)>=sizeof(T))
        new (buf) S(src);
        else
            throw(1);
    }
    
    operator T&()
    {
        // warning: dereferencing type-punned pointer will break strict-aliasing rules 
        return *reinterpret_cast<T*>(buf);
        
        // лекарство:
        // auto* p = reinterpret_cast<T*>(buf);
        // return *p;
 
        // проблема strict-aliasing заключается 
        // не в самом факте каста между несовместимыми указателями
        // а в разыменовывании такого несовместимого указателя
        
        // если же сначала скастить указатель в другой указатель
        // и только затем разыменовать этот другой указатель
        // то проблема исчезает
        
    }
    
    char buf[sizeof(S)];
};
struct some 
{
    some(const int a_=0, int b_=0, int c_=0):a(a_),b(b_),c(c_){}    
    int a,b,c;
};
struct else_one 
{
    else_one(const int a_):a(a_){}  
    int a;
};  
 
int main()
{
    std::cout << "Hello, world!\n";//Hello, world!    
    some obj(123);       
    mad_caster<some, else_one> rap(obj);    
   else_one ref = rap;
    std::cout << ref.a<<std::endl;//123
    std::cout << std::endl ;
    std::cin.get() ;
return 0 ;
}

То есть, в последних постах пытался донести до всех что-то такое, чего сам пытаюсь понять. Не по делу говорил, иначе говоря.
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.05.2016, 14:35 73
Цитата Сообщение от vxg Посмотреть сообщение
все операции легальны в терминах которые я читал в букварях.
странные у вас какие то буквари.

в тех, что читал я сам нигде не рассказывалось,
что можно просто так кастить теплое к мягкому.

C++
1
2
some* p1 = getSome();
other* p2 = getOther();
some и other никак не связанны друг с другом наследственными узами.
поэтому, каст указателей - нелегален.

компилятор имеет право думать,
что два таких несовместимых указателя
не могут указывать на один и тот же объект

и на этом выстраивает оптимизацию.

хотя по факту, вы конечно могли создать other,
и вернуть указатель на него, как some*
но это не есть "легальный код".
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
07.05.2016, 19:48 74
hoggy, смысл терминов из букварей заключался в том что указатель это адрес, а как его интерпретировать определяется его типом и проблемы будут лишь у тех кто либо пишет бред (то есть каст к тому чего нет по указанному адресу и по определению это нельзя развменовывать) либо кастует классы вверх наплевав на иерархию размещения полей и таблиц вирт функций что можно рассматривать как частный случай варианта номер один. О недопустимости загнать адрес чего угодно в char* void* или даже int и последующем приведении этого обезличенного указателя к любому типу там не говорилось ни слова и вот теперь пошла такая пена...
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.05.2016, 19:56 75
Цитата Сообщение от vxg Посмотреть сообщение
О недопустимости загнать адрес чего угодно в char* void*
это - легально.

Цитата Сообщение от vxg Посмотреть сообщение
или даже int
а это - нелегально.

Цитата Сообщение от vxg Посмотреть сообщение
и последующем приведении этого обезличенного указателя к любому типу там не говорилось ни слова и вот теперь пошла такая пена...
а как же ваши собственные слова?
Цитата Сообщение от vxg Посмотреть сообщение
проблемы будут лишь у тех кто либо пишет бред (то есть каст к тому чего нет по указанному адресу и по определению это нельзя развменовывать) либо кастует классы вверх наплевав на иерархию размещения полей и таблиц вирт функций что можно рассматривать как частный случай варианта номер один.
компилятор думает,
что программист не дибил,
и не будет кастить теплое к мягкому.

и заложившись на это положение,
он проворачивает некоторые оптимизации.

у вас указатели должны быть связанны родственными отношениями.
для хранилища вы можете использовать чаровые буфера.
но вы не можете легально использовать интовый буфер для этой цели.
0
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
07.05.2016, 20:38 76
Цитата Сообщение от hoggy Посмотреть сообщение
а это - нелегально
с чего бы это если у меня машина 32 бит? в VCL люди запихивают в Tag указатели и живут нормально
Цитата Сообщение от hoggy Посмотреть сообщение
а как же ваши собственные слова?
мои слова следует читать как "я поместил в void* что угодно и не понимаю почему я не могу достать из него что угодно - хотя по факту я конечно буду доставать тот тип что туда положил"
Цитата Сообщение от hoggy Посмотреть сообщение
вы не можете легально использовать интовый буфер для этой цели
почему если я к примеру хочу читать порциями 32 бит или выравнивать или все что угодно КАКОЕ простите сраному оптимизатору до этого дело - пусть делает свою работу и не лезет к "водителю"
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
07.05.2016, 20:56 77
Цитата Сообщение от vxg Посмотреть сообщение
с чего бы это если у меня машина 32 бит? в VCL люди запихивают в Tag указатели и живут нормально
не принципиально.
в инт можно пихать инт.
пихать в инт не инт - нельзя.

Цитата Сообщение от vxg Посмотреть сообщение
мои слова следует читать как "я поместил в void* что угодно и не понимаю почему я не могу достать из него что угодно - хотя по факту я конечно буду доставать тот тип что туда положил"
можете.

хотя читал, что каст к войду и обратно не всегда спасает от нарушений алиасинга.
типа шибко умный компилятор может пропасти контекст.

Цитата Сообщение от vxg Посмотреть сообщение
почему если я к примеру хочу читать порциями 32 бит или выравнивать или все что угодно КАКОЕ простите сраному оптимизатору до этого дело - пусть делает свою работу и не лезет к "водителю"
он и делает свою работу.
оптимизирует.

для оптимизации ему нужно закладываться на некоторые положения
здравого смысла.

для блобов сделали исключения - чаровое хранилище.

все что вам нужно - придерживаться регламента.

а то у вас батхерт:
хочу слить объект в интовое хранилище, а оно типа - это нельзя!
0
07.05.2016, 20:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2016, 20:56
Помогаю со студенческими работами здесь

Как в один Label Вывести текст и значение переменной типа float?
Пример Картошка: 21 кг Как это вывести в один Label?

Переменной d присвоить первую цифру после запятой некоторой переменной x типа float
Нужно целой переменной d присвоить первую цыфру после комы некоторой переменной x типа float ...

Как работать с переменной типа char?
Не понимаю переменную char и как с ней работать.

Передача переменной типа double из c# в переменную типа float в SQL
Здравствуйте, имеется проблема с передачей данных из кода c# в бд SQL Имеется переменная типа...


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

Или воспользуйтесь поиском по форуму:
77
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru