Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 02.10.2017
Сообщений: 9

Преобразовать char* в массив double

24.11.2017, 10:14. Показов 2904. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте, задача состоит в следующем :
Изначально нам дан массив double, который нужно зашифровать xor-ом, я привожу массив double к char массиву следующим образом:
C++
1
unsigned char *char_from_double = reinterpret_cast<unsigned char*>(&doubleArr);
После этого прохожу по нему xor-ом, и на этом этапе возник вопрос, как его преобразовать обратно из char* в double массив?
При приведении из char* к double массиву компилятор пишет что нельзя так делать...

Как вариант, отдельно шифровать каждый элемент массива double, и хранить массив массивов char*, где один char* это одно double число, но подозреваю что это не очень хороший вариант
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2017, 10:14
Ответы с готовыми решениями:

Как преобразовать массив char в число double?
Например: char a=0.25 в double b=0.25

Как преобразовать long double в char[]?
Приветствую. Подскажите пожалуйста, как преобразовать long double в в тип char? До указателей по книге еще не дошел, в интернете пытался...

Как преобразовать часть массива char в double
есть большой массив char в нем есть несколько элементов которые нужно преобразовать в число типа double например char X; ...

5
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,565
24.11.2017, 10:42
Цитата Сообщение от FruQube Посмотреть сообщение
При приведении из char* к double массиву компилятор пишет что нельзя так делать...
Что именно пишет?
0
0 / 0 / 0
Регистрация: 02.10.2017
Сообщений: 9
24.11.2017, 10:55  [ТС]
Пишет "для агрегатного обьекта требуется инициализация с использованием списка инициализации", вероятно я что то не так делаю, есть рабочий код для перевода из char* в double, но только одного элемента
C++
1
double C = *reinterpret_cast<double*>(doubleArr);
Но можно ли повторить подобное в массивом ?
0
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,565
24.11.2017, 11:07
Лучший ответ Сообщение было отмечено FruQube как решение

Решение

Это вот зачем так?
Цитата Сообщение от FruQube Посмотреть сообщение
C++
1
double C = *reinterpret_cast<double*>(doubleArr);
Получится по сути double C = doubleArr[0];.

Если как в первом сообщении, то обратное преобразование такое же:
C++
1
2
unsigned char *char_from_double = reinterpret_cast<unsigned char*>(&doubleArr);
double * double_from_char = reinterpret_cast<double*>(char_from_double);
1
0 / 0 / 0
Регистрация: 02.10.2017
Сообщений: 9
24.11.2017, 11:09  [ТС]
Да, разобрался, мы ведь преобразуем указатели, а не данные...
Спасибо за ответ
0
183 / 181 / 66
Регистрация: 15.02.2015
Сообщений: 515
24.11.2017, 11:10
Если вы преобразовывали char_from_double никуда не копируя, то хочу вас удивить, что ваш массив doubleArr содержит те же данные что и char_from_double (вы просто "по разному" смотрите на один и тот же блок памяти).
А так, если вы шифрование и дешифрирование делаете в разных "местах", то делается просто так:
C++
1
double* double_arr = reinterpret_cast<double*>(char_from_double);
Однако это опасное дело, потому как на некоторых платформах компилятор ещё не умеет делать выравнивание при таком преобразовании, т.е. если значение char_from_double не кратно машинному слову, то при касте его к double* адрес записанный в double_arr может сам варавниться, и как результат потеря данных и выход за пределы (при обращении к последнему элементу).
Безопаснее так:
C++
1
2
3
4
5
size_t char_arr_size;
// char_arr_size = размер char_from_double в байтах
size_t double_arr_size = char_arr_size / sizeof(double);
double* new_double_arr = new[double_arr_size];
std::memcpy(new_double_arr, char_from_double, double_arr_size * sizeof(double));
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.11.2017, 11:10
Помогаю со студенческими работами здесь

Не могу преобразовать тип char в тип double
Вся загвоздка в str1 и str2; #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include&quot;stdlib.h&quot; #include &quot;cstdlib&quot; #include...

Преобразовать string в массив char
Всем доброго времени суток!Как преобразовать string в массив char.

Как преобразовать переменную string в массив char[]?
Есть переменная string и массив char как записать переменную типа string в такой массив ? String X=&quot;test&quot;; char Mass; ...

Преобразовать символы из массива char в массив int
Нужно ввести символы числа в строку, а потом символы из неё последовательно записать в массив int char user_text; //Строка ...

Как преобразовать строку char в массив int?
Дана строка символов S, состоящая из чисел, разделенных пробелами Нужно выделить числа и засунуть их в массив типа int; Как можно это...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru