自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 C++ 内存泄漏:ASAN 工具使用教程

C++ 排查内存泄漏首选 ASAN,自带能准确定位到行号。。运行程序,退出后自动打印泄漏报告。能查:泄漏、越界、野指针、重复释放。你只要把你的代码用这个参数重新编译运行,就能立刻看到所有内存泄漏位置。

2026-06-30 18:03:57 183

原创 C++常见移动语义编译错误及解决办法

本文分析了C++11中常见的移动语义编译错误,重点针对包含不可移动类型(如std::condition_variable)的类无法使用移动赋值的问题。核心错误是尝试用临时对象赋值时移动运算符被自动删除。根本原因是类中存在不可移动成员(如condition_variable),导致编译器禁止移动操作。 文章提出了三种解决方案: 最优方案是添加reset()方法直接重置对象状态,无需创建临时对象; 次优方案是显式声明移动运算符(但对含condition_variable的类无效);

2026-06-15 16:37:36 331

原创 二进制字节流序列化

本文介绍了工业嵌入式开发中二进制序列化的实战应用,重点解析了EEPROM读写打包函数的设计与实现。文章首先对比了二进制协议相对JSON的优势:体积小、速度快、稳定性高,适合工业设备的资源限制。然后详细拆解了函数实现,包括协议格式设计、缓冲区管理、小端序处理、CRC校验等核心环节,并提供了三种典型调用示例(读取、写入、批量擦除)。该方案采用std::vector自动管理内存,通过offset指针跟踪写入位置,严格校验边界,可广泛应用于Modbus、CAN等工业协议开发。

2026-06-11 19:14:16 195

原创 C++17 联合体

本文探讨了使用C++17的std::variant解析两种风格JSON配置的方法。通过定义ConfigValue为std::variant<std::string, ConfigNode>,可以优雅地处理配置值可能是简单字符串或嵌套子映射的情况。对于多层嵌套JSON,建议使用std::shared_ptr实现递归结构。这种方法利用现代C++特性实现了类型安全的联合体解析,比传统方式更清晰可靠。文章主要面向C++高级语法学习,实际开发中可直接使用现成的JSON解析库。

2026-05-27 19:32:39 57

原创 【自用】常用c++操作

【代码】【自用】常用c++操作。

2026-05-15 12:14:03 46

原创 动态库makefile生成模板手把手教学

Makefile构建系统配置摘要 该Makefile提供了一个跨平台C/C++动态库构建系统,支持x86_64和多种ARM64架构平台(包括通用ARM64、瑞芯微RK3588和自定义平台)。系统采用模块化设计,包含: 基础配置区:定义目标库名(libipapply.so)、源文件目录、头文件路径等基础参数 平台选择区:通过PLATFORM变量切换不同目标平台 平台差异化配置:为每个平台定制编译器工具链、编译选项和Boost库路径 自动化功能:自动查找源文件、生成依赖关系、支持增量编译

2026-05-15 12:11:30 441

原创 架构设计——工厂加策略实现不同板卡管理优化

这篇文章介绍了一个基于C++的策略模式实现,主要特点包括: 遵循开闭原则:新增板卡类型时只需添加新的策略类并注册,无需修改工厂代码 自动注册机制:通过模板类StrategyRegistrar实现策略类的静态注册 工厂解耦:工厂类与具体策略类完全解耦,通过映射表管理创建函数 优化版本升级:引入单例模式和配置文件驱动,支持运行时动态配置 错误处理:编译期不检查注册情况,但运行时会抛出明确异常 核心设计亮点在于利用静态注册和模板技术实现策略类的自动注册,同时通过工厂模式隐藏具体实现细节。优化版进一步增加了配置文件

2026-05-14 14:09:41 460

原创 【自用】解析http post表单数据,将其中的二进制数据保存到csv文件且加载到内存

本文介绍了如何使用Mongoose网络库解析HTTP POST表单数据,并将二进制文件保存到CSV文件并加载到内存数据结构中。文章首先展示了前端发送的HTTP POST请求数据结构,包含MD5值和二进制文件。然后详细解释了Mongoose库中的关键数据结构:mg_str、mg_http_header、mg_http_message和mg_http_part,这些结构用于解析HTTP请求和表单数据。接着提供了文件操作工具函数,包括目录创建、删除和文件保存功能。最后展示了load_config_calibrat

2026-05-13 21:05:29 563

原创 【自用】C++每日一读(三)

本文分析了一个设备拓扑配置文件解析函数parse_device_topology()的实现。该函数从JSON配置文件中读取设备拓扑信息,包括版本、设备类型、名称等基础信息,并调用相关管理器解析协议数据、升级配置和版本信息。函数首先确保单次解析,然后读取JSON文件内容并验证。接着解析关键配置字段,如产品类型和设备名称等,若缺失则终止解析。最后,函数通过单例模式调用各管理器处理子配置,并解析设备配置数组。整个过程实现了设备拓扑信息的完整加载和初始化。

2026-05-07 19:43:56 213

原创 【小白必看】C++回调函数流程详解

本文介绍了C++回调机制的核心概念和标准实现方法。回调是通过将函数传递给对象,在特定时机由对象调用该函数的设计模式。文章通过外卖比喻生动解释了回调原理,并详细分解了实现回调的5个关键步骤:定义回调类型、存储回调函数、注册回调、执行回调以及主程序使用。特别强调了注册和执行回调的区别,指出前者是传递函数但不执行,后者才是真正调用。最后总结回调的本质是"你写函数,别人帮你调用",并指出这是C++中基于std::function的标准回调实现模板。

2026-04-17 17:51:22 63

原创 C++每日一读(二)【自用】

选取实战项目代码,每日一读,逐句解析,逐步提高阅码速度

2026-04-01 15:22:21 371

原创 每日一读(一)【自用】

这段代码实现了一个极简的二进制数据透传打包器。函数接收原始数据指针、长度和打包方式,返回智能指针管理的字符串。主要功能包括:参数校验、内存预分配、原始数据直接拷贝到字符串中,最后通过智能指针自动管理内存。该打包器不做任何数据修改或封装,仅实现数据透传功能,确保内存安全的同时提升性能。适用于需要原样传输二进制数据的场景。

2026-03-31 16:48:13 171

原创 linux常用命令积累【自用】

以实战项目为背景,积累工作中常用Linux语句

2026-03-31 11:32:04 187

原创 批量备份恢复文件脚本

本文介绍了一个用于备份和恢复系统配置文件及库文件的bash脚本。脚本主要功能包括: 备份功能: 自动创建带时间戳的备份目录 将配置文件和库文件/二进制程序分别打包成.tar.gz文件 生成备份清单记录备份内容 恢复功能: 支持全量恢复或选择性恢复(仅配置文件/仅库文件) 可从最新备份或指定时间戳备份恢复 主要特点: 使用绝对路径确保文件定位准确 包含详细的错误处理和状态提示 支持文件有效性检查,跳过不存在的文件 提供使用说明和示例 脚本通过tar命令实现文件打包/解包,适合用于系统关键配置和程序的备份恢复场

2026-03-30 16:56:52 512

原创 Git常用核心命令实操总结(新手避坑版)

本篇整理日常开发中最常用的Git命令,全是实操干货、无冗余理论,收藏起来,忘记的时候直接查,新手也能快速上手~

2026-03-17 11:06:07 1140

原创 【Qt】心跳检测与粘包处理:打造稳定可靠的TCP Socket通信

摘要 本文介绍了基于Qt的TCP Socket通信中解决粘包和心跳检测问题的关键技术。针对TCP粘包问题,采用长度前缀法,通过自定义数据包头(包含类型和长度信息)确保数据完整解析。心跳检测机制则通过定时发送检测包和超时计数器实现连接状态监控,服务端30s超时断开,客户端30秒无响应则重连。项目采用信号槽机制实现异步解包,并设计完整的状态管理逻辑,构建了稳定可靠的网络通信框架。源码已上传Git,包含基础版和优化版两个版本实现。

2025-12-16 19:24:04 1414

原创 【Qt】 TCP套接字通信学习文档

Qt提供了跨平台的TCP套接字通信功能,通过QTcpServer和QTcpSocket类简化网络编程。相比标准C++需要手动处理平台差异,Qt封装了底层细节,提供面向对象的API和信号槽机制实现异步通信。服务器端使用QTcpServer监听连接,通过nextPendingConnection()获取客户端套接字;客户端通过QTcpSocket的connectToHost()连接服务器。

2025-12-10 14:59:58 1097

原创 QPainter 指南:绘制各种图形

可以在各种绘图设备上进行绘制。QPainter 是 Qt 的。

2025-12-09 23:33:23 901

原创 模型视图代理(MVD)手把手教程

📝 Qt MVD框架笔记摘要 MVD基础:Qt的Model-View-Delegate框架实现数据与界面分离,支持多视图共享同一模型。Model管理数据,View负责显示,Delegate控制编辑和渲染方式。

2025-12-09 23:03:24 930

原创 【Qt】QFile文件编程

本教程详细介绍了Qt文件编程的核心类和方法,包括: QFile基础:文件创建、打开模式(ReadOnly/WriteOnly/Append等)和基本读写操作 文件读取:一次性读取或逐行读取,重点讲解了不同编码(UTF-8/GBK等)的处理方法 文件写入:覆盖写入和追加写入两种模式 高级文本处理:使用QTextStream进行格式化的文本读写,自动处理编码 二进制数据处理:通过QDataStream实现跨平台的二进制数据序列化 文件信息获取:利用QFileInfo查询文件大小、路径、时间等元数据 文件对话框

2025-12-05 19:13:18 1191

原创 Qt小项目:开发简易任务管理器

本文介绍了一个基于Qt框架开发的简易任务管理器实现方案。项目采用QGridLayout进行7:3比例布局,左侧使用QListWidget展示任务列表,右侧设置控制面板。核心功能包括:通过自定义Widget实现任务项显示(包含任务标签和完成按钮),支持任务添加、标记完成和清空等操作。技术亮点包括:利用信号槽机制处理任务状态变更,使用setData存储任务元数据,以及通过样式表实现已完成任务的视觉区分(绿色文字+删除线)。该实现展示了Qt在界面布局、自定义组件和数据绑定方面的典型应用模式。

2025-12-04 23:32:23 1280

原创 【C++第一特性:封装】

​ 人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌…设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号。​ 车也可以作为对象,属性有轮胎、方向盘、车灯…,行为有载人、放音乐、放空调…类在设计时,可以把属性和行为放在不同的权限下,加以控制。​ 在设计类的时候,属性和行为写在一起,表现事物。将所有成员属性设置为私有,可以自己控制读写权限。对于写权限,我们可以检测数据的有效性。设计一个圆类,求圆的周长。,人属于人类,车属于车类。,对象上有其属性和行为。

2025-11-18 17:33:38 423

原创 【函数提高】

*作用:**函数名可以相同,提高复用性同一个作用域下函数名称相同函数参数类型不同或者个数不同或者顺序不同函数的返回值不可以作为函数重载的条件//函数重载需要函数都在同一个作用域下cout << "func 的调用!" << endl;cout << "func (int a) 的调用!" << endl;cout << "func (double a)的调用!" << endl;cout << "func (int a ,double b) 的调用!" << endl;

2025-11-18 17:30:05 201

原创 栈与堆:内存管理的核心区别

⽣命周期:静态局部变量持续到程序结束,普通局部变量在函数结束时销毁。堆区:⼿动管理,空间较⼤,分配速度较慢,需要防⽌内存泄漏。局部变量存储在栈区,函数返回后栈帧被销毁,地址变得⽆效。存储位置:静态局部变量在全局区,普通局部变量在栈区。栈区:⾃动管理,后进先出,空间较⼩,分配速度快。静态局部变量和普通局部变量有什么区别?相同的字符串常量可能共享同⼀内存地址。初始化:静态局部变量只初始化⼀次。为什么不能返回局部变量的地址?内容只读,修改会导致运⾏时错误。解释栈区和堆区的主要区别。解释栈区和堆区的主要区别。

2025-09-25 10:21:19 142

原创 字符串反转函数实现

主函数读取—⾏并输出反转后的字符串。

2025-09-24 15:40:57 312

原创 C++引用:别名背后的本质解析

结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了。总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更清楚简单。**作用:**函数传参时,可以利用引用的技术让形参修饰实参。**作用:**常量引用主要用来修饰形参,防止误操作。作用:引用是可以作为函数的返回值存在的。**优点:**可以简化指针修改实参。**作用: **给变量起别名(在函数形参列表中,可以加。用法:函数调用作为左值。

2025-09-24 12:09:50 245

原创 深入理解C++内存四区模型

堆区数据由程序员管理开辟和释放堆区数据利用new关键字进行开辟内存。

2025-09-23 16:09:26 599

原创 C语言实现十进制转换为十六进制(字符数组存储)

【代码】C语言实现十进制转换为十六进制(字符数组存储)

2025-09-22 17:13:06 270

原创 C++结构体:从入门到精通

struct 结构体名 { 结构体成员列表 };struct 结构体名 变量名struct 结构体名 变量名 = { 成员1值 , 成员2值…}定义结构体时顺便创建变量//结构体定义//成员列表//姓名int age;//年龄int score;//分数}stu3;//结构体变量创建方式3//结构体变量创建方式1//struct 关键字可以省略stu1.name = "张三";

2025-09-19 15:24:38 469

原创 C/C++ 指针

int * p1;//定义p1为指向整型变量的指针变量char * p2;//定义p2为指向字符变量的指针变量指针变量的类型, 是指针所指向的变量的类型, 而不是自身的类型。因此,指针变量的类型与它所指向变量的类型必须一致{ int *p1;//定义p1应指向一个整型变量p1=&x;//将一个实型变量的地址赋给p1这段代码会报错,p1只能指向整型变量, 不能指向实型和字符型变量。

2025-09-19 10:31:26 2611

原创 编写⼀个程序,统计字符串str中每个字符出现的次数(不区分⼤⼩写)。

把str中每个字符(str[i])的ASCII码当做count的下标,然后我们记录下标出现的次数即可,只要这个字符出现,我们就把count[str[i]]++(本文把所有的大写字母转换为小写统计,读者可以自行思考用大写字母来统计)(其实很好理解,可以把str[i]整体看做下标j,即——>,同时下标 j 又是str 字符串的字符。

2025-09-18 11:49:28 272

原创 C/C++字符数组操作全解析

1、用字符常数初始化数组 例: char c[8]={‘c’, ‘h’, ‘i’, ‘n’, ‘a’};--若字符个数<数组长度, 则将这些字符赋给前面的元素, 其余元素自动为空字符(‘\0’)。

2025-09-17 18:11:45 772

原创 swap函数的编写方法,怎么将修改后的值传回来

1、当我们要写交换函数时,其实是想将交换后的值传回,但是使用如下方法时,我们只是重新开辟一片存储空间i,j,我们实际只是在swap1交换了局部变量的i,j值。此时的形参和实参实际的地址不是一致的,因此我们交换了形参变量值并不会对实参产生任何影响。

2025-09-17 13:24:19 323

原创 C数组小练

【代码】Cday2。

2025-09-15 20:53:47 175

原创 【C语言 琐碎tip】

/ * / % | 从左到右 //// < <= > >= | 从左到右 //// | | 从左到右 //// || | 从左到右 //// = += -= *= /= %= &= ^= |= <<= >>= | 从右到左 //

2025-09-12 21:19:34 1547

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除