Вот моя попытка. Любые советы о лучшем решении ?:Самый быстрый способ проверки переполнения?
// for loop to convert 32 to 16 bits
uint32_t i;
int32_t * samps32 = (int32_t *)&(inIQbuffer[0]);
int16_t * samps16 = (int16_t *)&(outIQbuffer[0]);
for(i = 0; i < (num_samples * 2/* because each sample is two int32 s*/); i++) {
overflowCount += (abs(samps32[i]) & 0xFFFF8000) ? 1 : 0;
samps16[i] = (int16_t)samps32[i];
}
// Only report error every 4096 accumulated overflows
if((overflowCount & 0x1FFF) > 4096) {
printf("ERROR: Overflow has occured while scaling from 32 "
"bit to 16 bit samples %d times",
overflowCount);
}
Вот та часть, которая на самом деле проверяет переполнение:
overflowCount += (abs(samps32[i]) & 0xFFFF8000) ? 1 : 0;
Мы преобразуем int32_t в int16_t. –
Просто хотел упомянуть: «В соответствии с вашим редактированием (http: // stackoverflow.com/revision/677427/list), вы поехали почти на весь мой пост. Спасибо за то, что вы не указали свое изменение в своем вопросе ». –
Вниз из-за вашего сбивающего с толку и бесполезного редактирования. –