C语言:把两个16位的数据合成32位浮点型数据

把两个 16 位的数据(uint16_t)合成一个 32 位的 float 数据,可以按照以下步骤来实现:

  1. 从两个 16 位数据恢复出 4 个字节
  2. 将 4 个字节合并成一个 32 位的 float 数据

已经有两个 16 位数据:uint16_t high16uint16_t low16,这两个数据存储了一个 32 位 float 的低 16 位和高 16 位。你可以按以下方法将它们合成一个 float 数据:

代码实现

复制代码
#include <stdio.h>
#include <stdint.h>

float combine16ToFloat(uint16_t high16, uint16_t low16) {
    uint32_t combined = ((uint32_t)high16 << 16) | low16;  // 合并两个 16 位数据
    float result;
    // 将 32 位的整数按浮动转换为 float
    memcpy(&result, &combined, sizeof(result));  // 使用 memcpy 来处理字节转换
    return result;
}

int main() {
    uint16_t high16 = 0x42F0;  // 高 16 位数据
    uint16_t low16 = 0x0000;   // 低 16 位数据

    float combinedFloat = combine16ToFloat(high16, low16);
    printf("Combined float: %f\n", combinedFloat);  // 打印合成后的浮点数
    return 0;
}

解释

  1. 合并 16 位数据

    • ((uint32_t)high16 << 16)high16 移动到高 16 位。
    • | low16low16 放到低 16 位。
    • 这样就得到了一个 32 位的整数 combined
  2. 转换为 float

    • 使用 memcpycombined 的字节内容拷贝到 float 类型的变量 result 中。这样做是因为 floatuint32_t 在内存中的表示方式不同,直接赋值可能导致数据不正确。

    • memcpy 是一种直接的字节拷贝方式,确保字节顺序没有变化。

相关推荐
lichenyang45318 小时前
鸿蒙聊天 Demo 练习 05:新增登录功能,实现登录态保存与页面访问控制
前端
还有多久拿退休金18 小时前
我用 Three.js 造了个 3D 漫步世界,角色走路像喝醉了——以及我是怎么修好的
前端·vue.js
SZLSDH18 小时前
场景适配论 | 数字孪生IOC建设中渲染技术与智能体能力的协同逻辑
前端·数据库·ai·数字孪生·数据可视化·智能体
_按键伤人_19 小时前
二、从零搭建本地 RAG 知识库
前端·llm·ai编程
_按键伤人_19 小时前
一、理解 RAG:从概念到实践
前端·llm·ai编程
SuperByteMaster19 小时前
uart中断发送和接收处理
c语言
lichenyang45319 小时前
鸿蒙聊天 Demo 练习 04:聊天历史本地缓存,实现消息记录持久化
前端
高翔·权衡之境19 小时前
主题10:实时性——硬实时与软实时
服务器·网络·驱动开发·信息与通信·智能硬件
名字都不重要何况昵称19 小时前
canvas 元素拾取
前端·canvas
从文处安19 小时前
「前端何去何从」React Router:让单页应用有多页的体验
前端·react.js