news 2026/6/10 10:33:24

qt-union-联合体基础讲解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qt-union-联合体基础讲解

目录

  • 简介
  • 为什么处理的是i而不是d?
  • 举例
  • 建议

简介

在C++中,通过联合体(union)实现double到字节数组的转换并处理大小端问题,是一种高效的类型双关(Type Punning)技术。

  • 联合体(union)的作用
    • 内存共享:联合体DoubleConverter的d(double类型)和i(quint64类型)共享同一块内存。当converter.d = value时,converter.i会存储该double值的二进制表示(IEEE 754标准)。
    • 类型双关:通过联合体,可以绕过C++的严格类型检查,直接操作double的底层字节。
  • 大小端切换原理
    • 大端序(Big-Endian):高位字节存储在低地址。代码中,converter.i的高位字节(如>>56)依次放入bytes[0]到bytes[7]。
    • 小端序(Little-Endian):低位字节存储在低地址。代码中,converter.i的高位字节放入bytes[7],低位字节放入bytes[0]。
  • 代码逻辑解析
unionDoubleConverter{doubled;quint64 i;};QByteArraydoubleToQByteArray(doublevalue,boolbigEndian){DoubleConverter converter;converter.d=value;// 将double值存入联合体QByteArray bytes;bytes.resize(8);// 确保8字节空间if(bigEndian){// 大端序:高位字节在前bytes[0]=(converter.i>>56)&0xFF;// 最高有效字节// ... 依次填充高位字节bytes[7]=converter.i&0xFF;// 最低有效字节}else{// 小端序:低位字节在前bytes[7]=(converter.i>>56)&0xFF;// 最高有效字节存末尾// ... 依次填充低位字节bytes[0]=converter.i&0xFF;// 最低有效字节存开头}returnbytes;}

为什么处理的是i而不是d?

  • 直接操作字节:double类型在C++中不可直接进行位运算(如移位、掩码)。通过联合体将其转换为quint64,可以逐字节操作内存表示。
  • IEEE 754兼容性:double的二进制布局符合IEEE 754标准,quint64的位操作能精确控制每个字节的顺序。

举例

以double value = 3.1415926535为例:

  • 大端序输出:40 09 21 FB 54 44 2D 18(高位字节在前)。
  • 小端序输出:18 2D 44 54 FB 21 09 40(低位字节在前)。

建议

  • 平台兼容性:联合体的行为在C++中属于实现定义(implementation-defined),但大多数编译器(如GCC、Clang、MSVC)支持此用法。
  • 字节顺序:确保发送方和接收方约定一致的大小端格式,避免数据解析错误。
  • 精度问题:double的二进制表示可能因平台浮点数精度差异导致细微误差,需在协议层明确精度要求。
    通过联合体和位操作,该方案高效实现了double到字节数组的转换,并支持灵活的大小端切换,适用于网络传输、文件存储等场景。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 9:13:24

语音合成技术突破:多语言TTS如何重塑智能交互体验

语音合成技术突破:多语言TTS如何重塑智能交互体验 【免费下载链接】sherpa-onnx k2-fsa/sherpa-onnx: Sherpa-ONNX 项目与 ONNX 格式模型的处理有关,可能涉及将语音识别或者其他领域的模型转换为 ONNX 格式,并进行优化和部署。 项目地址: h…

作者头像 李华
网站建设 2026/6/9 12:46:36

Unlock Music音乐解锁终极指南:一键解密所有加密音乐

你是否曾经遇到过这样的情况:花了不少钱在音乐平台下载了喜欢的歌曲,却发现只能在特定APP里播放,换个设备或者换个播放器就完全无法识别?别担心,Unlock Music音乐解锁工具就是为你量身打造的完美解决方案!这…

作者头像 李华
网站建设 2026/6/5 23:49:17

大模型推理瓶颈怎么破?试试NVIDIA TensorRT极致优化引擎

大模型推理瓶颈怎么破?试试NVIDIA TensorRT极致优化引擎 在今天,一个千亿参数的大语言模型生成一句话可能只需要几秒钟——听起来很快,对吧?但如果你是那个正在等待回复的用户,而系统每秒只能处理十几个请求&#xff…

作者头像 李华
网站建设 2026/6/9 16:48:32

植物大战僵尸修改器PVZTools:轻松实现游戏无限可能

植物大战僵尸修改器PVZTools:轻松实现游戏无限可能 【免费下载链接】pvztools 植物大战僵尸原版 1.0.0.1051 修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztools 还在为植物大战僵尸的高难度关卡而烦恼吗?PVZTools修改器专为游戏原版1…

作者头像 李华
网站建设 2026/5/22 18:32:05

UV-UI跨端开发框架终极实战指南:从零构建多平台应用

UV-UI跨端开发框架终极实战指南:从零构建多平台应用 【免费下载链接】uv-ui uv-ui 破釜沉舟之兼容vue32、app、h5、小程序等多端基于uni-app和uView2.x的生态框架,支持单独导入,开箱即用,利剑出击。 项目地址: https://gitcode.…

作者头像 李华
网站建设 2026/5/22 18:37:11

5分钟解锁网易云音乐:ncmdump音频转换完全指南

还在为网易云音乐下载的NCM文件无法在其他播放器使用而困扰吗?ncmdump作为专业的NCM格式处理工具,能够轻松将音频文件转换为通用的MP3或FLAC格式,让你更灵活地管理音乐资源。 【免费下载链接】ncmdump 转换网易云音乐 ncm 到 mp3 / flac. Con…

作者头像 李华