gpt4 book ai didi

c - int数组到C中的struct数组

转载 作者:行者123 更新时间:2023-12-02 08:46:29 24 4
gpt4 key购买 nike

我正在使用 Code-Blocks 和适用于 Windows 的 mingw GCC 编译器来用 C 编写我的程序。我定义了一个函数,其中输入是 int 类型的数组。我有另一个 struct 定义为

typedef struct {
float re;
float im;
}complex_float;

我想将 int 类型数组转换为 complex_float 类型数组,因为我需要处理 complex_float 格式的数据。我正在使用以下指针方法进行转换

complex_float *comSig = (complex_float *) sigbuf;

其中sigbif是一个int指针,指向整数数组的起始地址。

但是当我执行 printf("%f",comSig[0].re); 时,我得到了一些垃圾值,例如 -1.#QNAN0

我已经在 LINUX 上多次使用这种技术在数组之间进行数据转换并且它有效。这是与 mingw 编译器无法正常工作有关的问题,还是与我使用不正确的方法将 int 数组转换为 struct 数组有关。

最佳答案

这绝对是错误的。转换值的类型不会“转换”值,而只是告诉编译器将其视为不同的类型。作为一个 int 和你的结构很可能有不同的大小,从它们创建的数组也是如此,所以你甚至可以写/读超过你的整数数组的边界。如果您真的想将整数转换为复数,则必须自己编写代码:

int number_of_items = 10; // e. g. there are 10 integers
int *int_arr = // however you obtain the integer array
complex_float *cpx_arr = malloc(sizeof(*cpx_arr) * number_of_items);
int i;
for (i = 0; i < number_of_items; i++)
{
cpx_arr[i].re = (float)(int_arr[i]);
cpx_arr[i].im = 0.0f;
}

当然,不要忘记在使用后free(cpx_arr)

关于c - int数组到C中的struct数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com