|
0 / 0 / 0
Регистрация: 03.12.2022
Сообщений: 229
|
|
Перетипирование char c[8] в double11.05.2023, 16:55. Показов 1969. Ответов 39
Метки нет (Все метки)
Есть 8 байтов данных в интерпретации массива чаров. Нужно перетипировать эти данные в интерпретацию double.
0
|
|
| 11.05.2023, 16:55 | |
|
Ответы с готовыми решениями:
39
Делегат Func<Action<char>, bool, double, double> [Error] cannot convert 'double (*)(double)' to 'double' for argument '1' to 'double pow(double, double)' Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double |
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|
| 11.05.2023, 16:56 | |
std::memcpy из массива в переменную типа double. Готово.
0
|
|
|
1059 / 980 / 153
Регистрация: 10.08.2015
Сообщений: 5,318
|
|
| 11.05.2023, 19:22 | |
|
смотри какие шустрые...
0
|
|
|
Модератор
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
|
||||||
| 11.05.2023, 19:27 | ||||||
0
|
||||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||||||
| 12.05.2023, 09:16 | ||||||
123.45
0
|
||||||
|
0 / 0 / 0
Регистрация: 03.12.2022
Сообщений: 229
|
||||||
| 12.05.2023, 16:40 [ТС] | ||||||
|
Вот зачем искажать условие задачи. У меня не char*, потоков у меня нет.
_________________________ По опытам. Кака и следовало ожидать, результат неопределенный (возможно, баги Qt v.5.3) - и только методом повторения находится истина. В std:: нет memcpy. В QByteArray не работают методы .toDouble, .toInt и т.д. - все время возвращая 0. union char[8] и double дает один результат. memcpy в составе memory.h дает 2 разных результата с источником char[8] или QByteArray на 8 элементов (проблема не в перевернутости байтов, если бы речь шла о LittLeEndian или какой-то похожей фигне). Итог: «union char[8] и double» = "memcpy(&double, &char[8], 8)". Немного измененный код, но все же.
0
|
||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||||||
| 12.05.2023, 16:49 | |||||||||||
|
https://en.cppreference.com/w/... yte/memcpy
Читайте документацию внимательнее:
0
|
|||||||||||
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|||||
| 12.05.2023, 17:12 | |||||
? https://en.cppreference.com/w/... yte/memcpyQByteArray. Вас интересует char [8].
0
|
|||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 12.05.2023, 17:12 | ||
|
Если это замечание к моему коду - то я написал char * только потому, что при использованном мною формате инициализации не получается использовать char[8], т.к. к строке безусловно приписывается 0, который для нашей задачи не важен совершенно. А писать пример с посимвольным заполнением мне было лень писать, можете проделать это самостоятельно.
0
|
||
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|
| 12.05.2023, 17:34 | |
|
1
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||||||
| 12.05.2023, 17:47 | |||||||
|
Есть какой-то нюанс с порядком отображения байтов в памяти.
Для int я знаю про перестановку байтов на Intel-платформах, а вот про double мне как-то удивительно. Думал там такого нет. Вот пример:
Хотя любой online-калькулятор (да и просто из описания формата) число 2048 в double выглядит как 0x40A0000000000000 Вполне возможно, что ТС как раз бьётся об этот угол. Добавлено через 3 минуты ![]() Реинтерпретация указателей будет работать в Си (и ++) всегда, потому как это единственное вкусное что в нём есть. Без этого базиса этот язык вообще теряет всякий смысл. Более того я уверен, что тут вопрос формализма именно плюсового, но я даже вот не хочу в этот идиотизм вникать, уж извините (поверьте, это не к вам лично все эпитеты). Просто с UB плюсисты ну очень любят носиться как с писаной торбой, в каждом стандарте изобретая новые UB и новые форматы "как правильно", хотя суть-то проста: реинтерпретация указателя. Если знаете как написать по полному плюсовому феншую - напишите, плиз.
0
|
|||||||
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
||||
| 12.05.2023, 17:48 | ||||
|
В С++ не разрешается читать память char [8] как память double через приведение указателя. Поведение не определено.
0
|
||||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|
| 12.05.2023, 17:51 | |
|
TheCalligrapher,
ну при чем тут уже плюсы эти пресловутые?? Есть байты в памяти, как их интерпретировать - дело абсолютно произвольное; результат будет зависеть именно от интерпретации байтов в памяти, а не от синтаксиса языка. И, кстати, union даёт абсолютно идентичный результат, если что. Так что в данном случае, считаю, вы хоть и правы формально, но по сути это не ответ на озвученный вопрос: что с порядком байтов в представлении double ?? (эпыты на online-компиляторе, так что что у них там за платформа - не знаю; но от чего-то уверен, что intel)
0
|
|
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
|
| 12.05.2023, 17:53 | |
|
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 12.05.2023, 17:53 | ||
|
Однако, коль скоро через С++ мы таки можем "заглянуть" в память - можете вы сказать в чем тут дело?
0
|
||
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
|||
| 12.05.2023, 17:57 | |||
|
Только не про UB, а физически - в чем разница?? откуда она возьмётся?? Добавлено через 2 минуты PS А я пока ушел про Strict Aliasing читать. Спасибо!
0
|
|||
|
Вездепух
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
|
||
| 12.05.2023, 17:59 | ||
|
Компилятор знает, что по правилам языка информационной зависимости между такими char [8] и double нет, то есть значение double не зависит от значения char [8]. Поэтому он может запросто переставить чтение double выше, еще до того, как память char [8] была проинициализирована. Или компилятор может просто заметить, что вы занимаетесь нелегальной формой переинтерпретации памяти и просто безусловно всегда читать 0 вам назло. А может просто выкинуть чтение double из сгенерированного кода вообще. И даже если отвлечься от компилятора, тут есть еще run-time тонкости с требованиями выравнивания.
0
|
||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,517
|
|
| 12.05.2023, 20:52 | |
|
0
|
|
|
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
|
||
| 12.05.2023, 21:01 | ||
|
TheCalligrapher,
Короче сыскал я ответ:
А то что вы рассказываете - всё это конечно похвально. И в общем даже абсолютно верно. Только вот ни одна из страшилок UB не реализовалась, как видим. Да, это единственный, частный случай и всё такое, я понимаю.
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 12.05.2023, 21:20 | ||
|
1
|
||
| 12.05.2023, 21:20 | |
|
Помогаю со студенческими работами здесь
20
Из Char в Double char в double
Перевод double в char Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|