Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

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

#cpp #массивы #указатели


Здравствуйте, задача состоит в следующем : 
Изначально нам дан массив double, который нужно зашифровать xor-ом, я привожу массив
double к char массиву следующим образом:

    unsigned char *char_from_double = reinterpret_cast(&doubleArr);


После этого прохожу по нему xor-ом, и на этом этапе возник вопрос, как его преобразовать
обратно из char* в double массив?
Просто привести char* к double массиву не получается

Как вариант, отдельно шифровать каждый элемент массива double, и хранить массив массивов
char*, где один char* это одно double число, но подозреваю что это не очень хороший вариант
    


Ответы

Ответ 1



Точно так же только наоборот. reinterpret_cast преобразует только укзатель, сам массив остается неизменным. Если у вас алгоритм шифорвания корректный то должно работать так: double data_1[DATA_SIZE] = {...}; unsigned char * byte_array_1 = reinterpret_cast(&data_1[0]); auto secret = encrypt(byte_array_1, DATA_SIZE * sizeof(double)); double data_2[DATA_SIZE] = {...}; unsigned char * byte_array_2 = reinterpret_cast(&data_2[0]); decrypt(secret, byte_array_2, DATA_SIZE * sizeof(double)); double * data_2_pointer = reinterpret_cast(byte_array_2); Но обычно так не делают как вы описываете. Под зашифрованные данные нужно выделить отдельный массив байтов и в него складывать зашифрованные данные, а исходный массив изменять не надо. Так принято не только для шифрования, а вообще для всех видов подобных обработок данный например сжатия.

Ответ 2



Никак его не надо преобразовывать к double, потому что создается только указатель на массив. Данные как до шифрования, так и после продолжают лежать в массиве doubleArr. Можете в отладчике посмотреть и убедиться.

Комментариев нет:

Отправить комментарий