当前位置: 首页 > article >正文

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 是一种直接的字节拷贝方式,确保字节顺序没有变化。


http://www.kler.cn/a/534104.html

相关文章:

  • P5251 [LnOI2019] 第二代图灵机 Solution
  • c++中priority_queue的应用及模拟实现
  • Node.js与嵌入式开发:打破界限的创新结合
  • kubernetes 高可用集群搭建
  • 刷题记录 动态规划-7: 63. 不同路径 II
  • 实战:如何利用网站外部链接提升收录?
  • 基于 docker 的mysql 5.7 主备集群搭建
  • 【PDF多区域识别】如何批量PDF指定多个区域识别改名,基于Windows自带的UWP的文字识别实现方案
  • 第五十八节 k8s1.30.x 安装Redis集群
  • Redis --- 使用Feed流实现社交平台的新闻流
  • 【C++】STL——list底层实现
  • Java基础进阶
  • vue 学习笔记 - 2、简单的一个例子
  • vscode修改自定义模板
  • DeepSeek图解,10页小册子,PDF开放下载!
  • STM32-启动文件
  • Java进阶文件输入输出实操(图片拷贝)
  • 安装mindspore_rl踩坑
  • 【深度学习】Java DL4J基于 RNN 构建智能停车管理模型
  • 华为OD最新机试真题-狼羊过河-Java-OD统一考试(E卷)
  • 大语言模型极速部署:Ollama 、 One-API、OpenWebUi 完美搭建教程
  • 大语言模型的「幻觉」(Hallucination)是指模型在生成内容时
  • 玩转goroutine:Golang中对goroutine的应用
  • js的 encodeURI() encodeURIComponent() decodeURI() decodeURIComponent() 笔记250205
  • 解决python写入csv时如000111样式的字符串前面的0被忽略掉的问题
  • DeepSeek-R1:开源机器人智能控制系统的革命性突破