指针存储器地址到C的二进制转换?

时间:2019-02-16 16:56:46

标签: c embedded fft

我正在尝试从第一原理开始进行快速傅立叶变换。这样做的第一步是将输入数据重新排序为特定序列,从中可以应用基2蝶形算法。通过对数组位置进行位反转可以实现此特定序列,如下所示:

bit reversal

我想到的方法是,给定一个实际采样数据数组,以创建一个指针,该指针引用该数组的第一个位置。然后使用该指针将数据数组第一个位置的内存地址转换为二进制数,对其执行位反转,转换回十六进制,并将新数组的第一个位置设置为等于该数组的解引用值“位反转”的内存地址。循环执行此操作,每次都可以增加原始指针,计算出“反向”地址,并以正确的顺序用值填充新数组。

我有两个问题:

  1. 这是一种很好的编程习惯吗?我知道设置指向特定地址的指针是令人讨厌的,但我认为启动时会在内存中分配数组,因此应该可以。

  2. 如何使用C语言将指针值转换为二进制值?我想到了这样的东西:

    int sampledData [8]; int *指针=样本; int hex_address =(int)pointer;

1 个答案:

答案 0 :(得分:0)

对于FFT,您不想对地址指针进行位反转(它可能未与FFT长度对齐到合适的边界),而是希望对基于零的数组索引进行位反转(有时已实现)在C中作为访问数组的指针偏移量)。

通常,置换是“就地”完成的,其中使用原始索引和位崇敬的索引交换(使用临时变量)数组的元素,而不是将其复制到新数组,这需要更多操作内存(更大的数据缓存占用空间等)。