news 2026/6/17 18:42:06

qt-uint64_t转QByteArray小端字节序并指定长度-小端系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qt-uint64_t转QByteArray小端字节序并指定长度-小端系统

简介

在C++中,将uint64_t转换为小端字节序的QByteArray并指定长度,需通过手动字节分解+填充/截断实现。
核心代码实现

#include<QCoreApplication>#include<QByteArray>#include<QDebug>#include<cstdint>QByteArrayuint64ToQByteArrayLittleEndian(uint64_tvalue,inttargetLength,charpadChar='\0',Qt::Alignment padAlign=Qt::AlignRight){QByteArray bytes;bytes.resize(8);// 初始化为8字节(uint64_t的原始长度)// 手动按小端序分解uint64_t为字节bytes[0]=static_cast<char>(value&0xFF);// 最低有效字节(LSB)bytes[1]=static_cast<char>((value>>8)&0xFF);bytes[2]=static_cast<char>((value>>16)&0xFF);bytes[3]=static_cast<char>((value>>24)&0xFF);bytes[4]=static_cast<char>((value>>32)&0xFF);bytes[5]=static_cast<char>((value>>40)&0xFF);bytes[6]=static_cast<char>((value>>48)&0xFF);bytes[7]=static_cast<char>((value>>56)&0xFF);// 最高有效字节(MSB)constintcurrentLength=bytes.length();// 处理长度不足的情况if(currentLength<targetLength){constintpaddingNeeded=targetLength-currentLength;QByteArraypadding(paddingNeeded,padChar);if(padAlign==Qt::AlignRight){bytes.append(padding);// 末尾填充}elseif(padAlign==Qt::AlignLeft){bytes.prepend(padding);// 开头填充}else{qWarning()<<"Invalid alignment, defaulting to AlignRight";bytes.append(padding);}}// 处理长度超过的情况elseif(currentLength>targetLength){qWarning()<<"Truncating result to target length";bytes=bytes.left(targetLength);}returnbytes;}intmain(intargc,char*argv[]){QCoreApplicationa(argc,argv);uint64_ttestValue=0x123456789ABCDEF0;// 测试1: 目标长度10,末尾补零QByteArray result1=uint64ToQByteArrayLittleEndian(testValue,10);qDebug()<<"Result 1 (end padding):"<<result1.toHex();// 测试2: 目标长度10,开头补零QByteArray result2=uint64ToQByteArrayLittleEndian(testValue,10,'\0',Qt::AlignLeft);qDebug()<<"Result 2 (start padding):"<<result2.toHex();// 测试3: 目标长度6,截断处理QByteArray result3=uint64ToQByteArrayLittleEndian(testValue,6);qDebug()<<"Result 3 (truncated):"<<result3.toHex();returna.exec();}

关键逻辑解析

  • 小端序分解:
    uint64_t的最低有效字节(LSB)存储在bytes[0],最高有效字节(MSB)存储在bytes[7]。
    通过位操作(如value & 0xFF和移位)逐字节提取,确保小端序。
  • 长度处理:
    填充:若目标长度大于8字节,在开头或末尾填充指定字符(如\0)。
    截断:若目标长度小于8字节,保留前targetLength字节(可能破坏数据,需谨慎)。
    系统字节序无关性:
    代码手动控制字节顺序,与系统实际字节序无关。即使系统是大端,也能生成小端序的QByteArray。

测试用例输出

  • 测试1(末尾补零):
    原始数据:F0 DE BC 9A 78 56 34 12(小端序)
    目标长度10 → 末尾补2个零:F0 DE BC 9A 78 56 34 12 00 00
  • 测试2(开头补零):
    目标长度10 → 开头补2个零:00 00 F0 DE BC 9A 78 56 34 12
  • 测试3(截断):
    目标长度6 → 保留前6字节:F0 DE BC 9A 78 56

注意

截断风险:截断可能导致数据丢失或解析错误,需确保目标长度合理。
填充字符:根据协议或场景选择填充字符(如零、空格或自定义值)。
跨平台兼容性:手动字节分解确保代码在任何系统字节序下行为一致。
通过此实现,可灵活控制uint64_t到QByteArray的小端序转换及长度调整,满足网络传输、文件存储等场景需求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 17:23:03

POE2物品过滤器完整配置指南:提升游戏效率的5个关键步骤

POE2物品过滤器完整配置指南&#xff1a;提升游戏效率的5个关键步骤 【免费下载链接】NeverSink-Filter-for-PoE2 This is a lootfilter for the game "Path of Exile 2". It adds colors, sounds, map icons, beams to highlight remarkable gear and inform the us…

作者头像 李华
网站建设 2026/6/10 18:25:11

掌握空气动力学核心原理:北航刘沛清教授精品课程全解析

掌握空气动力学核心原理&#xff1a;北航刘沛清教授精品课程全解析 【免费下载链接】空气动力学基础北航精品课程-刘沛清学习资料 《空气动力学基础(北航精品课程)-刘沛清》是一部由北京航空航天大学提供的精品课程教材&#xff0c;由刘沛清教授编写。本教材深入浅出地讲解了空…

作者头像 李华
网站建设 2026/6/15 14:40:06

Qwen3-Next 80B大模型终极部署教程:从架构原理到生产级优化

Qwen3-Next 80B大模型终极部署教程&#xff1a;从架构原理到生产级优化 【免费下载链接】Qwen3-Next-80B-A3B-Instruct 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-Next-80B-A3B-Instruct 阿里巴巴达摩院最新推出的Qwen3-Next-80B-A3B-Instruct大语言…

作者头像 李华
网站建设 2026/6/15 12:39:23

NeverSink游戏物品过滤器快速部署指南

还在为《流放之路2》中眼花缭乱的物品掉落而烦恼吗&#xff1f;我们一起来解决这个痛点&#xff01;NeverSink游戏物品过滤器能够智能识别有价值的装备&#xff0c;通过醒目的颜色、声音提示和地图图标&#xff0c;让你的寻宝之旅更加轻松愉快 &#x1f3af; 【免费下载链接】N…

作者头像 李华
网站建设 2026/5/28 19:46:22

终极指南:使用IMAP邮件备份工具保护你的重要数据

终极指南&#xff1a;使用IMAP邮件备份工具保护你的重要数据 【免费下载链接】imap-backup Backup and Migrate IMAP Email Accounts 项目地址: https://gitcode.com/gh_mirrors/im/imap-backup 你是否曾经担心过重要邮件丢失&#xff1f;当邮箱服务突然中断&#xff0c…

作者头像 李华
网站建设 2026/6/15 15:24:36

Polars实战避坑指南:从入门到精通的终极解决方案

Polars作为现代数据处理工具&#xff0c;凭借其卓越的性能和简洁的API设计&#xff0c;已经成为数据分析师和工程师的首选。这份完整的Polars实战指南将带你避开所有常见陷阱&#xff0c;从零开始构建高效的数据处理流程。 【免费下载链接】polars 由 Rust 编写的多线程、向量化…

作者头像 李华