memcpy与结构体

2023-05-16

前言

最近小学期做通信的实验,很有意思。通讯是用了老师统一规定的结构体,但是苦于结构体与要传输时字符串数组的转换,思索了很久没有结果。

启发

在zigbee协议栈已经看到,传输结构体时,先调用了memcpy()函数,然后将转换后的字符串数组进行传输。自己在写电脑端时用的qt,于是必须要在qt实现这样的转换,于是试验了一下午,终于明白其中的道理。

过程

一开始的代码是这样的,拷贝是实现了,但是会多输出一段乱码,网上有很多朋友也出又出现乱码的问题,但是都没有很好的解释。

	QByteArray st;
    memcpy(st.data(),&UART_Control,sizeof(UART_Format_Control));
    std::cout << st.data()<<endl;

后来突然想到多了一段,那么大小就肯定不一样喽。于是:

    std::cout <<sizeof(UART_Control)<<" "<<sizeof(st.data())<<endl;

果然大小不一样,那么就是大小的问题了。于是尝试:

	st.resize(sizeof(UART_Control));

这样就成功了。现在看来,如果没有指定大小的话,在拷贝的时候,QByteArray会有一个默认的大小,而且正好和我需要的不一样,造成了错误。

坎坷

其实过程没有那么简单一下子就想到了大小。一开始看网上有人说是因为st的初值没有初始化,尝试过没用。期间还尝试字符串转结构体,(两种方法:memcpy(),强制转换),都是没问题的。

附加问题

因为协议中UART_Format_Control中各种数据段的存储本身就是用十六进制存储的,第一次进行实验时,因为理解上的偏差,又把它转成十六进制,相当于转了两次。真是脑袋生锈了哈哈。

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

memcpy与结构体 的相关文章

  • memcpy()函数

    描述 库函数 xff1a 从存储区 str2 复制 n 个字节到存储区 str1 void memcpy span class token punctuation span void str1 const void str2 size t
  • 如何在C中将数组拆分为两个数组

    假设我有一个 C 数组 int array 6 1 2 3 4 5 6 我怎么能把它分成 1 2 3 and 4 5 6 使用 memcpy 可以吗 谢谢你 nonono 当然 最简单的解决方案是使用分配两个新数组malloc然后使用mem
  • 针对 Core 2 或 Core i7 架构全面优化 memcpy/memmove?

    配备 DDR3 双通道内存的 Core 2 处理器的理论最大内存带宽令人印象深刻 根据维基百科文章在架构上 每秒 10 或 20 GB 然而 普通的 memcpy 调用无法实现这一点 3 GB s 是我在此类系统上见过的最高速度 这可能是由
  • Go结构体和字节数组之间的转换

    我正在用 Go 编写一个客户端 服务器应用程序 我想在 Go 中执行类似 C 的类型转换 例如 在围棋中 type packet struct opcode uint16 data 1024 byte var pkt1 packet n r
  • 执行memcpy(0,0,0)是否保证安全?

    我不太熟悉 C 标准 所以请耐心等待 我想知道按照标准是否可以保证memcpy 0 0 0 是安全的 我能找到的唯一限制是 如果内存区域重叠 则行为未定义 但是我们可以认为这里的内存区域是重叠的吗 我有 C 标准 ISO IEC 9899
  • mmap 之后在 memcpy 中获取分段错误 SIGSEGV

    我编写了一个简单的 Android 本机函数 它获取文件名和更多参数 并通过映射 mmap 内存来读取文件 因为它是 mmap 所以我实际上不需要调用 read 所以我只需从 mmap 返回的地址中调用 memcpy 即可 但是 在某个地方
  • 在什么条件下使用 std::memcpy 在对象之间复制是安全的?

    在什么条件下可以安全使用std memcpy从一个对象复制到另一个对象 例如 需要什么条件T src and dest满足以下条件是安全的 template
  • 在标准 C 中从头开始实现 memcpy 在技术上是不可能的吗?

    霍华德朱writes https twitter com hyc symas status 1088187814477553678 在最新的 C 规范中 不可能编写 malloc 或 memcpy 的 合法 实现 这是正确的吗 我的印象是
  • memcpy 不会抛出异常吗?

    希望这个问题有一个简单的答案 因为这似乎是一个简单的问题 但是我无法在互联网上找到任何有关此问题的信息 在下面的代码片段中 Visual Studio 抱怨 delete bytes 行的代码无法访问 try memcpy bytes ot
  • SIGBUS 同时从 mmap ed 缓冲区执行 memcpy,该缓冲区位于 RAM 中,由 mincore 识别

    我将块映射为 mapAddr mmap void 0 curMapSize PROT NONE MAP LOCKED MAP SHARED fd curMapOffset 如果这没有失败 mapAddr MAP FAILED 我查询 min
  • 内存复制速度对比 CPU<->GPU

    我现在正在学习 boost compute openCL 包装库 我的复制过程非常慢 如果我们将 CPU 到 CPU 的复制速度调整为 1 那么 GPU 到 CPU GPU 到 GPU CPU 到 GPU 复制的速度有多快 我不需要精确的数
  • 复制简单结构时 memcpy 和 '=' 之间的区别[重复]

    这个问题在这里已经有答案了 考虑复制一个不需要特殊复制语义的简单结构 struct A char i int i long l double b maybe more member struct A a a c a skip other m
  • Linux内核中memcpy的实现

    I see memcpylinux内核实模式下的实现 GLOBAL memcpy pushw si pushw di movw ax di movw dx si pushw cx shrw 2 cx rep movsl popw cx an
  • 我可以使用 memcpy 写入多个相邻的标准布局子对象吗?

    免责声明 这是试图深入研究一个更大的问题 所以请不要纠结于这个例子在实践中是否有意义 而且 是的 如果你想的话copy对象 请使用 提供复制构造函数 但请注意 即使该示例也不会复制整个对象 它会尝试将一些内存复制到一些相邻的 Q 2 整数上
  • Go-复制结构之间的所有公共字段

    我有一个存储 JSON 的数据库 以及一个提供外部 API 的服务器 通过 HTTP post 可以更改该数据库中的值 该数据库由不同的进程在内部使用 因此具有通用的命名方案 客户看到的密钥不同 但与数据库中的密钥进行 1 1 映射 存在未
  • 在 C# 中通过 TCP 发送 C 结构体

    我正在编写一个程序 通过 TCP 与一台设备的管理界面进行交互 问题是 设备的文档是用C写的 而我写的程序是用C 写的 我的问题是 文档指定 通信基于基于C结构的API缓冲区 再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP
  • 当复制联合对象时,是否会创建成员子对象?

    当访问联合体的另一个成员时 C 标准过去对发生的情况保持沉默 但这一点已被修复 以解释允许对联合对象的成员访问是为了分配给该尚不存在的对象 这会神奇地通过分配给对象或其成员之一来创建对象 本质上 成员访问运算符返回未来对象的承诺 您必须将其
  • 如何从迭代器推导连续内存

    不知何故 本土stl copy VC Dinkumware 上的算法表明它可以使用memcpy 可以轻松复制的数据 一个凡人能做到这一点吗 假设每个元素都是普通可复制的 random access iterator 是否意味着连续内存 标准
  • C 中的 CUDA:如何使用 cudaMemcpyAsync 修复错误 11

    我目前正在尝试使用 CUDA 运行一个简单的多 GPU 程序 它的基本作用是将一个包含一些虚拟数据的大型数组复制到 GPU GPU 进行一些数学计算 然后将结果数组复制回来 我在 VS2017 的输出中没有收到任何错误 但我设置的一些错误消
  • 出现段错误后 Memcpy 完成

    我有一个连接到主机的 PCIe 端点设备 ep 端点 的 512MB BAR 已进行 mmapped 并使用 memcpy 来传输数据 Memcpy 相当慢 2 5s 当我没有映射所有 BAR 100 字节 而是运行 memcpy 获取完整

随机推荐

  • 自旋锁代码实现

    package com xiang lock import java sql Time import java util concurrent TimeUnit import java util concurrent atomic Atom
  • Python开发Windows桌面应用程序(一)PyCharm+PyQt5开发环境搭建

    前言 最近想开发一套Netty网关日志分析程序 xff0c 用来分析设备的原始数据 因为网关是放在linux服务器上 xff0c 之前查看日志是通过Xftp工具将日志下载到本地 xff0c 然后找到对应的日志数据进行分析 对于运维人员来说
  • Python开发Windows桌面应用程序(二)简单应用程序实现

    前言 上编blog说到用Python开发Windows桌面应用程序的环境搭建 xff0c 下面就说说如何实现一个简单的远程日志读取的功能 界面绘制 打开界面绘制工具 xff0c 选中项目后 xff0c 右键找到External Tools
  • Java SpringBoot集成微信告警推送服务

    一 申请微信告警模板 登录微信公众号平台 xff0c 在服务里面找到模板消息 我们点击从模板库中添加一个模板消息 可以通过关键字搜索告警模板 xff0c 点击详情可以查看该模板的详情与示例 xff0c 判断该模板是否试用与我们 最后找到合适
  • 物联网组网技术优缺点对比:蓝牙、LoRa、wifi、NB-IoT、ZigBee等

    1 前言 最近对物联网产品自组网技术选型 xff0c 找到合适的组网技术 xff0c 让产品自行组网并完成数据的传输 2 参数对比 3 优缺点描述 3 1 蓝牙 优点 xff1a xff08 1 xff09 低功率 xff0c 便于电池供电
  • C# 实现国密SM3加解密封装

    1 Portable BouncyCastle 引入 右键解决方案的引用 xff0c 选择管理NuGet程序包 在浏览的搜索框中搜索 xff1a Portable BouncyCastle 选择第一个 xff0c 在右侧点击安装即可完成程序
  • Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别(照片对比)

    1 安装包依赖 与上篇通过摄像头动态识别人脸一样 xff0c 先下载好opencv python face recognition xff0c 这里因为使用的是照片对比的方式 xff0c 特意使用tkinter画了一个简单的GUI方便操作
  • Ubuntu 下NGINX 的简单使用

    1 NGINX的安装与卸载 1 1 安装NGINX apt get install nginx 1 2 NGINX操作命令 service nginx start 启动 service nginx reload 重新加载配置文件 servi
  • SpringBoot 集成Shell命令实现系统日志查询并通过API返回给前端

    1 目的 在做物联网项目中 xff0c 为了方便产品测试人员以及第三方产品集成商能通过系统快速获取设备原始数据 xff0c 因此考虑在物联网终端管理平台增加读取物联网通讯服务记录的终端日志的功能 我的想法是直接通过Java操作Linux服务
  • SPSS软件实操——ARIMA时间序列预测模型

    相关文章链接 时间序列预测 ARIMA模型 https blog csdn net beiye article details 123317316 spm 61 1001 2014 3001 5501 案例 xff1a 基于ARIMA模型对
  • SpringBoot使用阿里云邮件服务实现账户分享

    1 阿里云邮件集成 详情参见 xff1a Java SpringBoot集成阿里云短信与邮件服务 阿里云短信jar包 大鱼 gt 的博客 CSDN博客 2 使用Html模板实现邮件内容样式 2 1 引入pom lt dependency g
  • OSM学习之路(一):OSM介绍

    背景 xff1a 公司作为车联网行业 xff0c 少不了与地图打交道 xff0c 之前一直依赖谷歌 xff0c 百度等三方地图供应商来处理地图方面问题 但是随着客户量越来越大 xff0c 谷歌的吃相变得越来越难看 自7月16日起 xff0c
  • C语言单链表和结构体的结合

    链表与结构体的结合 xff0c 可以很好的方便输入输出 xff0c 以后使用链表时只需要将结构体的信息稍作修改就可以使用 xff0c 非常方便 xff01 xff01 xff01 下面是写学生学号和姓名的结构体与链表的结合create函数
  • struct和class的区别

    总结 xff0c 主要有这么几点不同 xff1a 1 struct 是值类型 xff0c class 是对象类型 2 struct 不能被继承 xff0c class 可以被继承 3 struct 默认的访问权限是public 而class
  • c++中模板类的成员函数的声明与定义应该放在头文件里

    今天尝试自己实现vector数据结构底层 xff0c 在定义vector模板类的时候 xff0c 还想像往常一样把类分为 h文件和 cpp文件 xff0c 把成员函数的声明放在 h文件中 xff0c 把具体实现放在 cpp文件中 xff0c
  • Byte 高位/低位简介绍(大端格式/小端格式)

    一个byte由8个二进制位构成1个字节 即1Byte 61 8Bit 其中左边是高位 xff0c 右边是低位 high four 61 byte amp 0xf0 gt gt 4 0xf0 61 11110000 low four 61 b
  • Python3+Requests库带验证码登陆学校教务系统的尝试。

    毕业快两年了 xff0c 上班空闲摸鱼的时候无意中打开了学校的教务系统 发现浏览器还记着我的学号和登陆密码 果然是很多东西你自己都忘了 xff0c 浏览器的云端都帮你记着 xff0c 输入验证码之后居然登陆进去了 学校的教务系统还是一如既往
  • RK3568开发笔记-socketCan编程

    目录 前言 一 socket can创建 xff1f 二 系统can节点设置 三 can过滤器设置 四 can数据发送 五 can数据接收 总结 前言 CAN是ControllerArea Network xff08 控制器局域网 xff0
  • vs2015基于UDP协议的简单通信例程

    vs2015基于UDP协议的简单通信例程 关键字 xff1a socket套接字 udp通信 注意 xff1a 1 UDP发送和接受数据分别使用sendto 和recvfrom 函数 xff0c 注意函数的用法 xff1b 2 在vs201
  • memcpy与结构体

    前言 最近小学期做通信的实验 xff0c 很有意思 通讯是用了老师统一规定的结构体 xff0c 但是苦于结构体与要传输时字符串数组的转换 xff0c 思索了很久没有结果 启发 在zigbee协议栈已经看到 xff0c 传输结构体时 xff0