#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. Можете в отладчике посмотреть и убедиться.
Комментариев нет:
Отправить комментарий