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
  • strcpy()、memcpy()、memmove()、memset()的实现

    strcpy memcpy memmove memset 的实现 strcpy 字符串拷贝 char strcpy char strDest const char strSrc assert strDest 61 NULL amp amp
  • Linux内核memcpy的不同实现

    目录 1 概述 2 高级SIMD和浮点寄存器介绍 2 NEON指令 2 1 VLDR 2 2 VLDM 2 3 VSTR 2 4 VSTM 3 ARM架构程序调用寄存器使用规则 3 1 ARM寄存器使用规则 3 2 NEON寄存器使用规则
  • memcpy 与 C 中的赋值——应该是 memmove?

    正如指出的这个问题的答案 编译器 在本例中是 gcc 4 1 2 是的 它很旧 不 我无法更改它 可以在它认为合适的地方用 memcpy 替换结构体赋值 我正在 valgrind 下运行一些代码 并收到有关 memcpy 源 目标重叠的警告
  • memcpy memmove GLIBC_2.14/2.2.5 的解释

    我的问题源于一个共享库 我没有选择重新编译该库 错误指出undefined reference to memcpy GLIBC 2 14 我机器上的 GLIBC 版本是 2 12 我已经看到人们使用该行在线完成的修复 asm symver
  • C 中最快的解交错操作?

    我有一个指向字节数组的指针mixed包含两个不同数组的交错字节array1 and array2 Say mixed看起来像这样 a1b2c3d4 我需要做的是对字节进行去交错 这样我就得到了array1 abcd and array2 1
  • 为什么我不能在 memcpy 中使用 const 参数?

    我有一个struct cVector3d我是memcpy将其放入 char 数组中 如下所示 void insert into stream std ostream stream cVector3d vector int length si
  • mmap 之后在 memcpy 中获取分段错误 SIGSEGV

    我编写了一个简单的 Android 本机函数 它获取文件名和更多参数 并通过映射 mmap 内存来读取文件 因为它是 mmap 所以我实际上不需要调用 read 所以我只需从 mmap 返回的地址中调用 memcpy 即可 但是 在某个地方
  • memcpy 错误:分段错误(核心转储)

    我正在尝试使用 memcpy 和以下代码将一个字符串复制到 c 中的另一个字符串 include
  • 在什么条件下使用 std::memcpy 在对象之间复制是安全的?

    在什么条件下可以安全使用std memcpy从一个对象复制到另一个对象 例如 需要什么条件T src and dest满足以下条件是安全的 template
  • 连接两个字符串数组?

    我是 c 世界的新手 我想将两个数组合并为一个数组 我有一个想法如何做到这一点 但它不起作用 P char s one Zorro Alex Celine char s two Zorro1 Alex1 char p char malloc
  • ARM/neon memcpy 针对*未缓存*内存进行了优化?

    我使用的是基于 Xilinx Zynq 7000 ARM 的 SoC 我正在努力处理 DMA 缓冲区 需要帮助映射 Xilinx ARM SoC Zynq 7000 上的预留 可缓存 DMA 缓冲区 https stackoverflow
  • CUDA:如何将 3D 阵列从主机复制到设备?

    我想了解如何将 3 维数组从主机内存复制到设备内存 假设我有一个包含数据的 3d 数组 例如 int host data 256 256 256 我想以这种方式将该数据复制到 dev data 设备数组 host data x y z de
  • 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
  • memmove 实际上是否“移动”了一块内存并在源头留下了零? [复制]

    这个问题在这里已经有答案了 可能的重复 memcpy 与 memmove https stackoverflow com questions 4415910 memcpy vs memmove Does memmove http www c
  • 你能在同一对象的非重叠区域之间进行memcpy吗?

    C17 说以下内容memcpy 7 24 2 1p2 memcpy函数将s2指向的对象中的n个字符复制到指向的对象中 通过 s1 如果复制发生在objects重叠 行为是未定义的 常见的解释是您不能复制重叠的内存区域 但这并不完全相同 因为
  • memcpy 是否保留不同类型之间的数据?

    是否打电话memcpy如果缓冲区大小足够 在两个不同的结构上保留原始数据 如果它们各自的数据类型重叠 它是否被定义为用先前数据类型的数据检索另一种数据类型的值 对于两种 c cpp 语言来说 这应该是相似的 但我在 cpp 中提供了一个示例
  • 使用 movsd 让编译器复制字符

    我想在时间关键的函数中复制相对较短的内存序列 小于 1 KB 通常为 2 200 字节 CPU 端的最佳代码似乎是rep movsd 但是我不知何故无法让我的编译器生成此代码 我希望 我隐约记得看到过 使用 memcpy 可以使用编译器内置
  • Go-复制结构之间的所有公共字段

    我有一个存储 JSON 的数据库 以及一个提供外部 API 的服务器 通过 HTTP post 可以更改该数据库中的值 该数据库由不同的进程在内部使用 因此具有通用的命名方案 客户看到的密钥不同 但与数据库中的密钥进行 1 1 映射 存在未
  • 如何从迭代器推导连续内存

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

随机推荐

  • 自旋锁代码实现

    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