QByteArray数据移位注意事项

我们的目的是要将一个QByteArray数组中的四个字节合并成一个32位的无符号整数(quint32)或有符号整数(qint32)。假设将arr中的四个字节分别设置为0xF10xF20xF3,和 0xF4,我们要拼出一个无符号数0xF1F2F3F4。

代码1

void MainWindow::test()
{
    QByteArray arr;
    arr.resize(4);
    arr[0]=0xF1;
    arr[1]=0xF2;
    arr[2]=0xF3;
    arr[3]=0xF4;

    qint8 A1 = arr.at(0);
    qint8 A2 = arr.at(1);
    qint8 A3 = arr.at(2);
    qint8 A4 = arr.at(3);

    quint32 IA1 = quint32(A1<<24);
    quint32 IA2 = quint32(A2<<16);
    quint32 IA3 = quint32(A3<<8);
    quint32 IA4 = quint32(A4);

    quint32 value = (IA1 | IA2 | IA3 | IA4);

    qDebug()<<value; 
}

上面的代码是错误示范,得到的结果是0xFFFFFFF4。调试结果如下:

代码2

void MainWindow::test1()
{
    QByteArray arr;
    arr.resize(4);
    arr[0]=0xF1;
    arr[1]=0xF2;
    arr[2]=0xF3;
    arr[3]=0xF4;

    quint8 A1 = static_cast<quint8>(arr.at(0));
    quint8 A2 = static_cast<quint8>(arr.at(1));
    quint8 A3 = static_cast<quint8>(arr.at(2));
    quint8 A4 = static_cast<quint8>(arr.at(3));

    quint32 IA1 = quint32(A1<<24);
    quint32 IA2 = quint32(A2<<16);
    quint32 IA3 = quint32(A3<<8);
    quint32 IA4 = quint32(A4);

    quint32 value = (IA1 | IA2 | IA3 | IA4);

    qDebug()<<value;
}

上面的代码得到的结果是0xF1F2F3F4。调试结果如下:

总结

在字节移位操作时,要将其强制转换位unsigned char类型,即按无符号数据进行移位操作。

扩展

如果我们最后需要的是一个有符号数,则完成移位操作和拼接过程后再强制转为有符号类型就可以啦。

代码3

void MainWindow::test2()
{
    QByteArray arr;
    arr.resize(4);
    arr[0]=0xF1;
    arr[1]=0xF2;
    arr[2]=0xF3;
    arr[3]=0xF4;

    quint8 A1 = static_cast<quint8>(arr.at(0));
    quint8 A2 = static_cast<quint8>(arr.at(1));
    quint8 A3 = static_cast<quint8>(arr.at(2));
    quint8 A4 = static_cast<quint8>(arr.at(3));

    quint32 IA1 = quint32(A1<<24);
    quint32 IA2 = quint32(A2<<16);
    quint32 IA3 = quint32(A3<<8);
    quint32 IA4 = quint32(A4);

    quint32 value = (IA1 | IA2 | IA3 | IA4);

    qint32 value2 = static_cast<qint32>(value);//int

    qDebug()<<value;

    qDebug()<<value2;
}

调试结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/659038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ADOP带你了解:800G 收发器的类型和应用

随着对快速数据传输的需求不断增加&#xff0c;800G收发器因其高带宽、快速传输速率、出色的性能、紧凑的设计和面向未来的兼容性等特性而引起了人们的极大兴趣。在本文中&#xff0c;我们旨在概述各种 800G 光模块&#xff0c;并深入研究它们的应用&#xff0c;以帮助您在选择…

Window下VS2019编译WebRTC通关版

这段时间需要实现这样一个功能&#xff0c;使用WebRTC实现语音通话功能&#xff0c;第一步要做的事情就是编译WebRTC源码&#xff0c;也是很多码友会遇到的问题。 经过我很多天的踩坑终于踩出来一条通往胜利的大路&#xff0c;下面就为大家详细介绍&#xff0c;编译步骤以及踩…

智能合约革命:Web3引领智能化商业的未来

随着区块链技术的日益成熟和普及&#xff0c;智能合约作为其重要应用之一&#xff0c;正在逐渐改变着商业世界的面貌。Web3作为下一代互联网的代表&#xff0c;以其去中心化、加密安全的特性&#xff0c;为智能合约的发展提供了无限可能&#xff0c;将智能合约应用于商业领域的…

工业工程师日子越来越受不了?IE们都在做什么?

有一位工业工程师&#xff08;IE&#xff09;毕业在一家工厂工作&#xff0c;入职一年了&#xff0c;本科读的是工业工程&#xff0c;他说理想很美好现实很骨感&#xff0c;以为做和本科一样的职业就能够大展宏图&#xff0c;结果上司天天让他盯生产线&#xff0c;在厂房一站就…

2024HW|常见红队使用工具

目录 什么是HW&#xff1f; 什么是网络安全红蓝对抗&#xff1f; 红队 常见工具 信息收集工具 Nmap 简介 漏洞扫描工具 Nessus简介 AWVS 简介 抓包工具 Wireshark简介 TangGo 简介 web 应用安全工具 Burpsuite 简介 SQLMap webshell 管理工具 蚁剑 冰蝎 后…

定个小目标之每天刷LeetCode热题(3)

这是一道简单题&#xff0c;我这里就只讲两种解法 第一种是数组加双指针&#xff0c;先遍历链表将值存到数组里&#xff0c;然后分别从数组两端进行一一比较判断是否满足回文&#xff0c;代码实现 class Solution {public boolean isPalindrome(ListNode head) {List<Inte…

88.合并两个有序数组

题目解析&#xff1a; 非递减顺序说明&#xff0c;是递增的数列。m 、n分别表示数列1 和 数列2中元素的个数&#xff0c;但是要注意的是&#xff0c;数列1的长度的是mn&#xff0c;不单纯的只是m&#xff0c;所以这里的m的含义需要特别注意。 这道题意思就是说&#xff0c;把列…

工控一体机10.1寸显示器电容触摸屏(YA07JK)产品规格说明书

如果您对工控一体机有任何疑问或需求&#xff0c;或者对如何集成工控一体机到您的业务感兴趣&#xff0c;可移步控芯捷科技。 一、硬件功能介绍 1.1 YA07JK介绍 YA07JK 是我公司推出的一款新型安卓屏&#xff0c;使用电容触摸屏。4 核 Cortex-A7 架构&#xff0c;主频1.2GHz …

STM32——启动文件选择及启动文件宏定义

文章目录 前提&#xff1a;以STM32F1xx系列芯片为例&#xff08;有方法&#xff0c;其他系列一样&#xff09;启动文件选择对应启动文件的寻找方法对应宏定义#define的寻找方法另外 前提&#xff1a;以STM32F1xx系列芯片为例&#xff08;有方法&#xff0c;其他系列一样&#x…

【YOLOv10的使用】YOLOv10的训练/验证/预测/导出模型/ONNX模型的使用

&#x1f680;&#x1f680;&#x1f680; YOLOv10: 实时端到端的目标检测 性能 YOLOv10比最先进的YOLOv9延迟时间更低&#xff0c;测试结果可以与YOLOv9媲美&#xff0c;可能会成为YOLO系列模型部署的“新选择”。 目录 1 安装 2 训练 3 验证 4 预测 5 导出模型 6 ONNX…

Ubuntu20.04升级到22.04之后出现的问题

项目场景&#xff1a; 之前一致使用的是Ubuntu20.04&#xff0c;虽然丑了点&#xff0c;但是用着没什么问题&#xff0c;最近没能按捺住好奇心&#xff0c;升级到了22.04&#xff0c;升级后颜值有所提高&#xff0c;但是也带来了一些问题。 从20.04升级到22.04&#xff0c;起始…

PG TOAST技术

1.Toast简介&#xff1a; Toast是超长字段在PG的一个存储方式&#xff0c;对于用户来说不用关注这一技术的实现&#xff0c;完全是透明的&#xff0c;它会将大字段值压缩或分散为多个物理行来存储&#xff0c;与Oracle的CLOB&#xff0c;BLOB类似。 2.Toast的存储方式&#xf…

基于STM32实现智能水下机器人控制系统

目录 引言环境准备智能水下机器人控制系统基础代码示例&#xff1a;实现智能水下机器人控制系统 电机控制深度传感器数据读取IMU传感器数据读取用户界面与显示应用场景&#xff1a;水下探测与环境监测问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌入式…

【教程】利用API接口添加本站同款【每日新闻早早报】-每天自动更新,不占用文章数量

本次分享的是给网站添加一个每日早报的文章&#xff0c;可以看到本站置顶上面还有一个日更的日报&#xff0c;这是利用ALAPI的接口完成的&#xff01;利用接口有利也有弊&#xff0c;因为每次用户访问网站的时候就会增加一次API接口请求&#xff0c;导致文章的请求会因为请求量…

Java基础-注解

注解本质是继承了Annotation接口的一个接口 首先&#xff0c;我们通过键值对的形式可以为注解属性赋值&#xff0c;像这样&#xff1a;Hello&#xff08;value “hello”&#xff09;。 接着&#xff0c;你用注解修饰某个元素&#xff0c;编译器将在编译期扫描每个类或者方…

【官方YOLOV10代码训练验证自己的数据集】

*************************************************** 码字不易&#xff0c;收藏之余&#xff0c;别忘了给我点个赞吧&#xff01; *************************************************** Start 官方YOLOV10代码训练验证自己的数据集 官方论文&#xff1a;https://arxiv.…

JavaSE:String类常用方法(巨详细)

1、引言 在学习C语言时&#xff0c;我们就已经了解了字符串&#xff0c;但是在C语言中字符串只能用字符数组或者指针来表示&#xff0c;没有特定的字符串类型&#xff0c;而在Java中&#xff0c;我们有了字符串这一特定的类型---String类。 2、String类的常用方法 2.1 字符串…

鲲泰新闻|神州鲲泰创新智算之旅北京站开幕,发布全新智算架构和液冷整机柜产品应对 “多云、异构、绿色”挑战

5月17日&#xff0c;神州鲲泰智算中国行北京站盛大召开。在本次活动上&#xff0c;神州鲲泰针对用户对大模型训练、大算力需求的痛点&#xff0c;重磅发布多云异构环境下智算中心绿色着陆的产品及方案&#xff0c;包含异构智算调度运营平台HISO、异构智算加速平台HICA以及一体化…

pytest-sugar插件:对自动化测试用例加入进度条

摘要 在自动化测试过程中&#xff0c;测试进度的可视化对于开发者和测试工程师来说非常重要。本文将介绍如何使用pytest-sugar插件来为pytest测试用例添加进度条&#xff0c;从而提升测试的可读性和用户体验。 1. 引言 自动化测试是软件开发过程中不可或缺的一部分&#xff…

windows web提权

#Web到Win-系统提权-人工操作 如果提权中无法执行命令的话&#xff0c;可以尝试上传cmd.exe到可读写目录再调用 优点&#xff1a;解决实时更新不集成的EXP 缺点&#xff1a;操作繁琐&#xff0c;需要各种复现调试 1、信息收集 参考常见命令&#xff08;见上图&#xff09; …