C语言实现16bit/32bit浮点和定点相互转换的函数
下面是用 C 语言实现将浮点数组转换为 16 位定点数和 32 位定点数的函数。我们将分别实现两个函数:一个用于将浮点数组转换为 16 位定点数(Q15 格式),另一个用于将浮点数组转换为 32 位定点数(Q31 格式)。
1. 浮点数组转换为 16 位定点数(Q15
格式)
#include <stdio.h>
#include <stdint.h>
#include <limits.h>
#define Q15_FRACTIONAL_BITS 15
#define Q15_FACTOR (1 << Q15_FRACTIONAL_BITS)
// 浮点数组转换为 16 位定点数的函数
void float_to_q15_array(const float *float_array, int16_t *fixed_array, size_t length) {
if (float_array == NULL || fixed_array == NULL) {
printf("错误:输入数组指针为空。\n");
return;
}
for (size_t i = 0; i < length; ++i) {
float value = float_array[i];
int32_t fixed_value = (int32_t)(value * Q15_FACTOR);
// 确保值在 16 位范围内
if (fixed_value