gpt4 book ai didi

c++ - 关于空隙长度的困惑*

转载 作者:行者123 更新时间:2023-11-30 02:49:49 25 4
gpt4 key购买 nike

我有一个关于 void* 的问题。我有一个功能,可以通过麦克风捕获 0.2 秒的音频 block 。我必须处理这些 block ,具体来说是一个卷积。

此函数将这些音频 block 作为 void * 返回。要处理此信息,我不能使用 void * 因为我无法访问它们,所以我必须转换为其他类型的数据,例如 double 但我不知道为这个新指针分配了哪个长度或如何分配我可以做吗?

我的代码:

void Pre_proc_mono::PreProcess(void *data, int lenbytes, float t_max){
double * aux = (double*) data;
}

现在,aux 的长度也是 lenbytes 吗?或者我必须做类似的事情:

int size = lenbytes/sizeof(double);

我怎样才能让它工作?

最佳答案

指针是内存中的地址。这是数据的第一个字节的地址。指针的类型告诉您数据有多长。所以如果我们有

int *p

p 的值告诉你数据从哪里开始,以及指针的类型,在这种情况下 int * 告诉你从那个地址你需要取 4 个字节(在大多数架构上) .

void * 指针只有起始地址,但没有数据的长度,所以这就是为什么你不能取消引用 void * 指针。

sizeof(p) 其中 p 是指针(任何类型)是指针的大小,与您在指针指向的位置找到的数据类型无关

例如:

sizeof(char) == 1
sizeof(char *) == 4
sizeof(void *) == 4

在你的函数中:

void *data, int lenbytes, float t_max

data 是指向数据开始位置的指针,lenbytes 是数据有多少字节。

所以你可以有这样的东西:

uint8_t *aux =  (uint8_t*) data;

并且您有一个 lenbytes 元素的 vector ,类型为 uint8_t(uint8_t 保证有 1 个字节)。

或者像这样:

double * aux = (double*) data;

并且您有一个 lenbutes/sizeof(double) 元素的 vector ,类型为 double。但是您需要注意 lenbytessizeof(double) 的倍数。

编辑

至于你应该转换成什么,答案只取决于你的数据 block 的格式。阅读文档,或搜索示例。

关于c++ - 关于空隙长度的困惑*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20899848/

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