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

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

24.11.2017, 10:14. Показов 2896. Ответов 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,563
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,563
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
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru