c++ - C/C++ - 如何将带符号的 32 位整数转换为 float 并返回

标签 c++ c floating-point int

我需要能够将 C SInt32 整数转换为 [-1, 1] 范围内的 float 并返回。我已经看到关于 24 位整数的这个问题的讨论:

C/C++ - Convert 24-bit signed integer to float

我也试过类似的东西:

 // Convert int - float
 SInt32 integer = 1;
 Float32 factor = 1;
 Float32 f = integer / (0x7FFFFFF + 0.5);

 // Perform some processing on the float
 Process(f);

 // Scale the float
 f = f * factor;

 // Convert float - int
 integer = f * (0x7FFFFFF + 0.5);

但是这不起作用。我知道它不起作用,因为我正在做的工作涉及音频编程并且转换会导致嘶嘶声。

我很确定这是一个转换问题,因为当我通过将因子设置为 0.0001 使浮点变小时,噼啪声消失了。也许反向转换使 int 超出了它的限制并导致它被截断。

如有任何建议,我们将不胜感激。

最佳答案

继续阅读 IEEE floating point formats . IEEE 32-bit float仅支持 24 位有效位,因此如果您转换 32 位整数,您将丢失低 8 位。

关于c++ - C/C++ - 如何将带符号的 32 位整数转换为 float 并返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126297/

相关文章:

c - -Ofast 以外的任何内容都会导致 "undefined reference"错误

c - write() 在写入大数据后永远被阻塞

多个 `FILE` 对象可以共享同一个文件描述符吗?

c++ - 如何修复 MSVC++(Microsoft Visual Studio)中与 "macro overloading"相关的可变参数宏相关问题?

c++ - 类中的pthread_create调用函数

c++ - 带字符偏移量 0x01F 的 Base 256 GUID 字符串表示

java - Float 和 Double NaN(非数字)值

c++ - 如何减小C++标准库libstdc++.so文件大小

java - 解析有效数字后得到垃圾?

ruby - 如何有效地清除 Ruby 的负零 float ?