我正在尝试根据第一原理实现快速傅立叶变换。这样做的第一步是将输入数据重新排序为可以应用基 2 蝴蝶算法的特定序列。这个特定的序列是通过数组位置的位反转来实现的,如下所示:
我想到的方法是,给定一个真实采样数据的数组,创建一个引用该数组的第一个位置的指针。然后使用该指针将数据数组第一个位置的内存地址转换为二进制数,对其执行位反转,转换回十六进制并将新数组的第一个位置设置为等于该数组的取消引用值“位反转”内存地址。在循环中执行此操作,我将能够每次增加原始指针,计算出“反向”地址并使用正确顺序的值填充新数组。
我有两个问题:
这是好的编程习惯吗?我知道将指针设置为特定地址是不受欢迎的,但我认为数组是在启动时分配在内存中的,所以应该没问题。
如何使用 C 语言将指针值转换为二进制值?我想到了这样的事情:
int 采样数据[8]; int * 指针 = 样本; int hex_address = (int)指针;
最佳答案
对于 FFT,您不想对地址指针进行位反转(该指针可能未与 FFT 长度的合适边界对齐),而是希望对从零开始的数组索引进行位反转(有时实现在 C 中作为访问数组的指针偏移量)。
非常常见的是,排列是“就地”完成的,其中使用原始索引和位尊重索引交换数组的元素(使用临时变量),而不是复制到新数组,这需要更多内存(更大的数据缓存占用空间等)。
关于c - C 中指针内存地址到二进制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725460/