在 C 中将 uint8_t* 转换为 int16_t8

Casting uint8_t* to int16_t8 in C

提问人:jjjjbbb 提问时间:11/10/2023 更新时间:11/10/2023 访问量:17

问:

我正在尝试从这里改编一个示例,该示例读取 PDM 麦克风数据并使用串行 USB 将其打印到计算机。 我想绕过示例中的过滤阶段,这样我就可以在维护其他函数的同时编写自己的过滤器。

我目前的计划是将传入的 PDM 数据作为过滤阶段的输出传递。但是,输入为 ,输出为 。最简单的铸造方法是什么?我复制了下面的整个函数。uint8_t* inint16_t* outinout

int pdm_microphone_read(int16_t* buffer, size_t samples) {
    int filter_stride = (pdm_mic.filter.Fs / 1000);
    samples = (samples / filter_stride) * filter_stride;

    if (samples > pdm_mic.config.sample_buffer_size) {
        samples = pdm_mic.config.sample_buffer_size;
    }

    if (pdm_mic.raw_buffer_write_index == pdm_mic.raw_buffer_read_index) {
        return 0;
    }

    uint8_t* in = pdm_mic.raw_buffer[pdm_mic.raw_buffer_read_index];
    int16_t* out = buffer; //need to change this line
    
    pdm_mic.raw_buffer_read_index++;

    for (int i = 0; i < samples; i += filter_stride) {
#if PDM_DECIMATION == 64
        Open_PDM_Filter_64(in, out, pdm_mic.filter_volume, &pdm_mic.filter);
#elif PDM_DECIMATION == 128
        Open_PDM_Filter_128(in, out, pdm_mic.filter_volume, &pdm_mic.filter);
#else
        #error "Unsupported PDM_DECIMATION value!"
#endif

        in += filter_stride * (PDM_DECIMATION / 8);
        out += filter_stride;
    }

    return samples;
}
铸造: Raspberry-Pi-Pico UInt8T UIT16 PDM

评论


答:

0赞 Xeno 11/10/2023 #1

如果我理解正确,您需要逐个条目复制列表列表条目。我会使用for循环:

for (int p1 = 0, p2 = 0; p1 < IN_SIZE; p1++, p2++) {
    out[p1] = (int16_t)in[p2];
}