Адрес памяти указателя для двоичного преобразования в C? - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь реализовать быстрое преобразование Фурье из первых принципов.Одним из первых шагов в этом направлении является переупорядочение входных данных в определенной последовательности, из которой может быть применен алгоритм бабочки radix-2.Эта конкретная последовательность достигается путем инвертирования битов в позициях массива, как показано ниже:

bit reversal

То, как я думал, это сделать, учитываямассив реальных выборочных данных, чтобы создать указатель, который ссылается на первую позицию массива.Затем, чтобы использовать этот указатель, чтобы преобразовать адрес памяти первой позиции массива данных в двоичное число, выполнить обращение к нему битов, преобразовать обратно в шестнадцатеричное и установить первую позицию нового массива равной разыменованному значению этого«бит обращенный» адрес памяти.Делая это в цикле, я смог бы каждый раз увеличивать исходный указатель, обрабатывать «обратный» адрес и заполнять новый массив значениями в правильном порядке.

У меня два вопроса:

  1. Это даже хорошая практика программирования?Я знаю, что установка указателей на определенные адреса не одобряется, но я полагаю, что массивы выделяются в памяти при запуске, так что все должно быть в порядке.

  2. Как преобразовать значение указателя в двоичное значение, используя язык Си?Я думал о чем-то вроде этого:

    int sampledData [8];int * pointer = samples;указатель int hex_address = (int);

1 Ответ

0 голосов
/ 17 февраля 2019

Для БПФ вы не хотите инвертировать битовый указатель адреса (который может быть не выровнен по подходящей границе для длины БПФ), вам нужно инвертировать битовый индекс массива на основе нуля (иногда реализуетсяв C в качестве смещения указателя для доступа к массиву).

Очень часто перестановка выполняется «на месте», когда элементы массива меняются местами (с использованием временной переменной) с использованием как исходного, так и почитаемого индекса, а не копируются в новый массив,который требует больше памяти (больший объем кэша данных и т. д.).

...