繁体   English   中英

关于空隙长度的困惑*

[英]Confusion about length of void*

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

此函数将这些音频块作为 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;

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

或者像这样:

double * aux = (double*) data;

你必须的矢量lenbutes/sizeof(double)类型的元素double 但是您需要小心,使lenbytessizeof(double)的倍数。

编辑

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM