浮点数据的固定点
Fixed point to floating point data
本文关键字:数据 更新时间:2023-10-16
i从TDM传输中从编解码器(ADC(中恢复24位固定点数据。然后将数据存储到INT缓冲区(32位(中。我想将其转换为浮点数据。
我尝试了:
g_analog_input_chL_mean = (((float)(*rx_block_pointer[buffer_cntr] << 8)) * (1.0/2147483648.0));
进行此转换的最佳方法是什么?
谢谢Costi
它取决于固定点数据的缩放,以及如果数据是签名或未签名的。当您使用float表示32位固定点数据时,您会失去一些数字,因为一些位用于存储指数。我不太明白,为什么您可以进行32位转换,因为您可以跳过此步骤
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr])/(float)(0x7FFFFF);
如果您坚持此32位转换,请使用
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr] << 8)/(float)(0x7FFFFFFF);
请注意,我总是会使用比编写小数号更安全的十六进制标准。您的确是错误的,因为最大签名的整数是2147483647,而不是2147483648。
如果ADC值具有未签名的格式,则可以使用相同的表达式,但包括签名位:
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr])/(float)(0xFFFFFF);
或
g_analog_input_chL_mean = (float)(*rx_block_pointer[buffer_cntr] << 8)/(float)(0xFFFFFFFF);
最后一点:ADC值可能不会缩放到一个。因此,可能有必要通过您的最大浮点值来误解整个表达式。
编辑
我现在看到将其转移到32位的必要性。然后,在转换为Float时,编译器将能够执行正确的符号解释。谢谢您的更正。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 在运行时处理类型擦除的数据-如何不重新发明轮子