QByteArray与char、int、float(及其数组)之间的互相转化

2023-05-16

int转4字节数组

QByteArray SCL::intTo4ByteArray(int i)
{
    QByteArray ba;
    ba.resize(4);
    ba[0] = (uchar)(0x000000ff & i);
    ba[1] = (uchar)((0x0000ff00&i)>>8);
    ba[2] = (uchar)((0x00ff0000&i)>>16);
    ba[3] = (uchar)((0xff000000&i)>>24);
    return ba;
}
int转2字节数组

QByteArray SCL::intTo2ByteArray(int i)
{
    QByteArray ba;
    ba.resize(2);
    ba[0] = (uchar)(0x000000ff & i);
    ba[1] = (uchar)((0x0000ff00&i)>>8);
    return ba;
}
int转单字节

QByteArray SCL::intToByteArray(int i)
{
    QByteArray ba;
    ba.resize(1);
    ba[0] = (uchar)(0x000000ff & i);
    return ba;
}
字节数组转int

int SCL::ByteArray4ToInt(const QByteArray &bytes)
{
    int i = bytes[0] & 0x000000FF;
    i |= ((bytes[1] <<8)&0x0000FF00);
    i |= ((bytes[2] <<16)&0x00FF0000);
    i |= ((bytes[3] <<24)&0xFF000000);
    return i;
}

QByteArray与char*的转换

方式1 传统方式data()和size()函数 (方便)


  
  1. QByteArray array(10, 'Q');//初始化

  2. //array 赋值等代码

  3. //...

  4. // 转化

  5. char *buf;//只是一个指针

  6. int len;//buf的长度

  7. buf = array.data();

  8. len = array.size();

方式2 memcpy()方式 (灵活)


  
  1. QByteArray array(9,'Q');

  2. char buf[10];//数组

  3. int len_array = array.size();

  4. int len_buf = sizeof(buf);

  5. int len = qMin( len_array, len_buf );

  6. // 转化

  7. memcpy( buf, array, len );

2 char* 转 QByteArray 

方法1 利用构造函数 (方便)


  
  1. char buf[10];

  2. //给buf赋值

  3. for (int i = 0; i < 10; i++)

  4. {

  5. buf[i] = (i + 1) % 3;//其中存在'\0'元素

  6. }

  7. // 转化

  8. QByteArray array;

  9. array = QByteArray(buf, 10);//因为buf[]中有`\0`,必须要写上数据长度;否则,数据会直接截断,丢失数据

 方式2 memcpy()方式 (灵活)


  
  1. char buf[10];

  2. //给buf赋值

  3. for (int i = 0; i < 10; i++)

  4. {

  5. buf[i] = (i + 1) % 3;//其中存在'\0'元素

  6. }

  7. // 转化

  8. QByteArray array;

  9. array.resize(sizeof(buf));//重置数据大小

  10. memcpy(array.data(), buf, sizeof(buf));//copy数据

3.1. int 与 QByteArray 互转 

[1] int 转 QByteArray


  
  1. // int 转 QByteArray

  2. int intVar = 199;

  3. QByteArray array;

  4. int len_intVar = sizeof(intVar);

  5. array.resize(len_intVar);

  6. memcpy(array.data(), &intVar, len_intVar);

[2]QByteArray 转 int[]


  
  1. // QByteArray 转 int[]

  2. // array 数据接上面

  3. int outIntVar[4];

  4. memcpy(&outIntVar, array.data(), len_intVar);

  5. //memcpy(&outIntVar, array, len_intVar);//此行代码与上句通用

4.1. float[] 与 QByteArray 互转

[1] float[] 转 QByteArray


  
  1. // float[] 转 QByteArray

  2. float fVar[4] = { 1.1, 2.3, 9.5, 0.2 };//初始化变量赋值

  3. QByteArray array;

  4. int len_fVar = sizeof(fVar); // 4*4 = 16 (一个float占4个字节)

  5. array.resize(len_intVar);

  6. memcpy(array.data(), &fVar, len_fVar);

[2]QByteArray 转 float[]


  
  1. // QByteArray 转 float[]

  2. float outFvar[4];

  3. memcpy(&outIntVar, array.data(), len_fVar);

  4. //memcpy(&outFvar, array, len_fVar);//此行代码与上句通用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QByteArray与char、int、float(及其数组)之间的互相转化 的相关文章

  • c#子线程和主线程创建窗体时顶层显示的区别

    主线程 1 设置TopLevel xff0c Topmost bringfront属性 子线程 2 在可在Load事件里注册循环设置TopLevel xff0c Topmost bringTofront属性的方法 xff0c 如下 frm
  • 模态对话框阻塞主线程的话不影响其他线程操作主线程控件(不阻塞)

    Task Factory StartNew 61 gt Thread Sleep 5000 this Invoke new Action 61 gt this button7 Text 61 34 aaaaaaaaaaaaaa 34 Mes
  • Ubuntu18.04.3虚拟机安装步骤图文教程

    虚拟机的安装步骤就不教学了 xff01 自行百度 xff01 接下来 教学ubuntu18 04 3desktop amd64版本的安装和配置教程 软件下载地址详细介绍 xff1a ubuntu 18 04 3 下载速度很快 xff1a 2
  • Linux安装QTCreator问题解决汇总

    关于Ubuntu18版本下新安装Qtcreator编译报错 cannot run compiler clang 43 43 output的解决办法 前两次本以为记住了 xff0c 结果第三次再次在Linux下安装qtcreator依然捣鼓搞
  • Qt路径中常用字符“./”、“../”、“/”、“*”的含义

    在Qt中进行编程时 xff0c 当我们需要调用某些路径时候 xff0c 特别是调用QDir类进行访问时 xff0c 会定义一系列的字符串 xff0c 并将这些字符串赋值给路径 xff0c 这时候就出现了一个问题 xff0c 这些字符串所代表
  • Qt工程pro文件的配置和头文件和库的添加

    Qt开发中 xff0c pro文件是对正工程所有源码 编译 资源 目录等的全方位配置的唯一方式 xff0c pro文件的编写非常重要 xff0c 以下对几个重要项进行说明 xff08 win和linux xff0c mac平台通用配置 xf
  • Qt -线程基础(QThread、QtConcurrent、信号槽等)

    昨晚看Qt的Manual xff0c 突然发现下一个版本的Qt中 Qt4 7 4 Qt4 8等 增加了一个特赞的介绍多线程的文章 xff1a Thread Basics 注意 xff1a 该链接以后会失效 xff0c 但是 到时候你直接看Q
  • Qt中线程同步的几种方法详解

    1 QMutex类 QMutex类就像一把锁 xff0c 在互斥量以前上锁 xff08 QMutex lock xff09 xff0c 而后在使用完互斥量以后解锁 xff08 QMutex unlock xff09 好比下面的代码 xff1
  • Qt中多线程同步总结示例

    1 QMutex QMutex mutex void func mutex lock mutex unlock 2 QMutex联手QMutexLocker 在复杂函数或者异常处理中 xff0c 对mutex进行lock 和unlock 操
  • vnc远程连接ubuntu,如何实现vnc远程连接ubuntu教程图解

    Ubuntu Linux是由南非人马克 沙特尔沃思 Mark Shuttleworth 创办的基于Debian Linux的操作系统 Ubuntu几乎包含了所有常用的应用软件 xff1a 文字处理 电子邮件 软件开发工具和Web服务等 用户
  • 什么是元学习?

    作者 Aleksandr Movchan 编译 VK 来源 Medium 人工智能的一个基本问题是它无法像人类一样高效地学习 许多深度学习分类器显示了超人的表现 xff0c 但需要数百万个训练样本 知识不共享 xff0c 并且每个任务都独立
  • Qt-多线程-QThread分析总结

    QThread是Qt提供的线程类 xff0c 每一个QThread均可管理一个线程 其具有两种使用方式 xff1a 1 继承为QThread的子类 xff1b 2 继承为QObject的子类 xff0c 并使用QObject moveToT
  • C++中 二重指针详解

    前言 上篇博文讲到数组和指针的一些关系 xff0c 本篇博文会在这基础之上讲解一些更为复杂的指针 xff0c 这些指针在笔试题中经常出现 xff0c 对刚毕业找工作的大学生有很大的作用 指向指针的指针 在指针篇 xff08 1 xff09
  • C++中数组初始化方法

    定义 xff1a int pia 61 new int 10 array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组 xff0c 并返回指向该数组第一个元素的指针 xf
  • 类对象的内存和堆空间的内存及初始化详解

    对象的内存 对象的内存可以存在于 3 种地方 xff1a 全局区 xff08 数据段 xff09 xff1a 全局变量栈空间 xff1a 函数里面的局部变量堆空间 xff1a 动态申请内存 xff08 malloc new等 xff09 文
  • C++内存空间管理

    1 C 43 43 内存机制 1 栈 Stack xff0c 函数中的局部变量 xff0c 由编译器负责分配释放 xff0c 函数结束 xff0c 变量释放 2 堆 Heap xff0c 通过new 申请的内存 xff0c 由delete或
  • Qt中跨线程下信号和槽的使用方法

    connect用于连接qt的信号和槽 xff0c 在qt编程过程中不可或缺 它其实有第五个参数 xff0c 只是一般使用默认值 xff0c 在满足某些特殊需求的时候可能需要手动设置 Qt AutoConnection xff1a 默认值 x
  • Qt 中开启线程的多种方式小结

    简介1 继承 QThread 重写 run 函数2 继承 QObject 调用 moveToThread3 继承 QRunnable 重新 run 函数 xff0c 结合 QThreadPool 实现线程池4 使用 C 43 43 11 中
  • Qt中exec函数的作用

    Qt中的exec 方法到处可见 xff0c 例如 xff1a QCoreApplicaton exec QApplication exec QDialog exec QThread exec QMenu exec 那么 xff0c 这些ex
  • 在Qt中使用全局变量的两种方式,及出现无法解析的命令的问题

    很多小伙伴在Qt编程时 xff0c 不会使用全局变量 xff0c 其实基本有两种方式来定义使用全局变量 xff0c 第一种是根据c c 43 43 的extern来进行多文件的使用 xff0c 第二种方法就是把全局变量放在类中 xff0c

随机推荐

  • Qt中信号槽形参值传递,引用传递,指针传递的实例及总结

    在同一个线程中 当信号和槽都在同一个线程中时 xff0c 值传递参数和引用传递参数有区别 xff1a 值传递会复制对象 xff1b xff08 测试时 xff0c 打印传递前后的地址不同 xff09 引用传递不会复制对象 xff1b xff
  • vnc远程连接,5个步骤教你如何轻松实现vnc远程连接

    当我们在进行vnc远程连接时 xff0c 往往找不到有用的工具来支撑我们的工作 那当我们在进行vnc远程连接时 xff0c 有什么工具能让我们快速实现vnc远程连接呢 xff1f iis7服务器管理工具 如图 xff1a IIS7服务器管理
  • 关于qt信号槽传指针与释放指针

    今天 xff0c 意外发现qt中信号槽传指针的方式进行时 xff0c 会发生释放不掉指针所分配的空间的情况 定义一个信号 void emit showTime Data 槽 void slot showTime Data 在发出信号之前动态
  • Qt-信号和槽函数传递自定义参数前需注册自定义数据类型

    Qt 信号和槽函数参数只能是基于 Qt 的基础类型的 xff0c 比如 QString int bool 等 xff0c 如果想传递自定义类型默认情况下是行不通的 要想在 Qt 的信号和槽函数之间传递自定义类型 xff0c 可以先将自己的自
  • Qt 设置窗口背景图片的几种方法实例

    1 在paintEvent事件中绘制图片 void Widget paintEvent QPaintEvent ev QPainter painter this painter drawPixmap rect QPixmap 34 bg j
  • Qt事件处理的几种方式

    Qt提供了5种事件处理和事件过滤的方法 xff1a 1 重写事件处理器函数 这是大部分情况最常用的一种 xff0c 如重写 paintEvent mousePressEvent keyPressEvent 等事件处理器虚函数 2 重写 QO
  • QT中添加图片资源的方法

    1 在ui设计界面中添加label xff0c 用于显示图片 2 添加QT资源文件 往项目中添加新文件 xff0c 选择QT分类中的资源文件 xff0c 名称为 34 myImage 34 其他选项默认 3 添加资源 在项目目录下新建文件夹
  • Q_OBJECT的作用

    只有继承了QObject类的类 xff0c 才具有信号槽的能力 所以 xff0c 为了使用信号槽 xff0c 必须继承QObject 凡是QObject类 xff08 不管是直接子类还是间接子类 xff09 xff0c 都应该在第一行代码写
  • Qt编写自定义控件及插件的使用

    在使用Qt Designer设计窗体界面时 xff0c 我们可以使用Widget Box里的窗体控件非常方便的绘制界面 xff0c 比如拖进去一个按钮 xff0c 一个文本编辑器等 虽然Qt Designer里的控件可以满足我们大部分的需求
  • QT中窗口去掉最大化最小化关闭按钮及菜单的方法

    在QT界面开发过程中 xff0c 有的时候需要隐藏最大化最小化甚至是关闭按钮 xff0c 以排除用户的操作系统无定义 xff0c 让程序流向混乱现总结如下 xff1a 1 Qt的QDialog去掉最大化和最小化以及关闭按钮 xff1a 在构
  • Qt创建右键菜单的方法

    函数 所有派生自QWidget的控件 xff0c 若实现在其上右键单击弹出菜单 xff0c 需要设置该控件的上下文菜单策略函数为setContextMenuPolicy Qt CustomContextMenu xff0c 设置该策略后当用
  • QT 中实现QLabel的点击事件(重写QLabel)

    默认情况下 xff0c QLabel是不支持点击事件的 xff0c 要实现QLabel的点击事件 xff0c 一般有两种方式 xff1a 1 继承QLabel xff0c 重写鼠标点击事件 xff0c 通过发送信号与父窗体实现通讯 Clic
  • flashfxp连接失败,flashfxp连接失败怎么办

    FlashFXP是一款功能强大的FXP FTP软件 xff0c 允许你从任何ftp服务器直接传输文件到你的本地硬盘 xff0c 或者在两个FTP站点之间传输文件 xff0c 即站点到站点传输 xff0c 而无须经过自己的计算机 听起来是不是
  • Qt 模态窗口和非模态窗口

    项目中要用到非模态窗口 xff0c 程序一开始弹出一个主窗口来 xff0c 点击一个按钮的时候弹出一个非模态窗口 xff0c 虽然是一个比较简单的需求 xff0c 但是在实现的过程中有各种问题 列一下自己遇到的问题并且说一下自己的解决方法
  • qt中使用重写控件的方法

    在 cpp文件里的构造函数里F2类名进入到ui h文件手动改自定义控件指针及实例 xff0c 切记如果重新生成项目方案提示更新ui h文件时选择不更新此文件否则手动改完的会自动变回去
  • Qt对话框的事件循环分析(子线程中不能创建UI窗体分析)

    重要 xff1a GUI线程和辅助线程 如前所述 xff0c 每个程序在启动时都有一个线程 这个线程被称为 主线程 在Qt应用程序中也称为 GUI线程 Qt GUI必须在这个线程中运行 所有小部件和几个相关类 例如QPixmap 都不能在辅
  • qt 子线程(多线程)更新gui的几种方法

    直接进入主题 xff0c 据我所知 xff0c 方法有3种 xff1a 1 自定义signal slot xff0c 这个就不多说了 xff0c 标准方法 2 使用QmetaMethod invoke xff0c 这是可以直接在子线程调用的
  • QT-多线程重要概念及与界面之间交互总结(混淆点分析:c#中可以在子线程中创建ui控件,qt中不能在子线程中创建ui控件)

    1 线程与界面组件需要注意的地方 在QThread线程中不能直接创建QWidget之类的界面组件 xff08 c 中可以在子线程中创建ui控件 xff09 因为在QT中 所有界面组件相关的操作都必须在主线程中 也就是GUI thread 所
  • Qt-事件过滤器eventFilter概念及使用方法实例

    一 事件的流向 QT的各种控件 xff08 QObject的子类 xff09 都有事件处理成员函数 xff0c 例如 xff1a bool QObject event QEvent e 所有事件 dragEnterEvent QDragEn
  • QByteArray与char、int、float(及其数组)之间的互相转化

    int转4字节数组 QByteArray SCL intTo4ByteArray int i QByteArray ba ba resize 4 ba 0 61 uchar 0x000000ff amp i ba 1 61 uchar 0x