- 博客(163)
- 收藏
- 关注
原创 字节序详解
无论你的程序编译运行在什么字节序的机器上,只要你正确使用了这些转换函数,发送到网络上的数据一定是大端序(网络字节序),从网络收到的数据也一定能正确转换为主机字节序。网络协议栈(如TCP/IP)定义了数据包中各个字段的格式和含义,这些字段很多都是多字节整数(如端口号、IP地址、数据包长度、序列号、校验和等)。中,如果定义了自定义的、包含多字节整数(长度字段、状态码、自定义ID等)的消息结构体,并且该协议需要跨不同字节序的主机工作,(源端口、目的端口、总长度、校验和、序列号、确认号、源IP、目的IP等)。
2025-07-29 21:31:07
875
原创 Linux网络编程——IP地址与端口、通信协议、Socket套接字基础概念解析
IP地址找到网络上的设备端口号找到设备上的应用程序。需要可靠、有序、不怕慢一点-> 选TCP(如文件传输、网页浏览)。需要极速、低延迟、能容忍偶尔丢失-> 选UDP(如视频通话、在线游戏)。在 TCP 或 UDP 之上,定义具体应用的数据格式和交互规则。HTTP是构建在 TCP 上最著名的请求-响应协议,用于 Web。Socket (套接字)是应用程序进行网络编程的统一 API。通过创建类型 Socket 使用 TCP,创建SOCK_DGRAM类型 Socket 使用 UDP。
2025-07-29 19:36:17
516
原创 网络通信协议详解:TCP协议 vs HTTP协议
是两个核心协议,但它们的职责和层级完全不同。TCP是底层传输协议,负责数据的可靠传输;HTTP是应用层协议,定义了如何交换网页内容。下面通过对比和案例详细讲解它们的区别与联系。
2025-07-26 14:20:08
742
原创 BS架构/CS架构详解(含案例)
通过浏览器访问服务器应用,无需安装客户端,依赖Web技术(HTML/CSS/JavaScript)。:网页版邮箱(Gmail)、在线文档(Google Docs)、电商网站(淘宝)、天气查询网站。:微信、QQ、Steam游戏平台、Photoshop、银行ATM机系统。:客户端和服务器通过专用网络协议通信,客户端需单独开发并安装。下面通过生活化案例和对比,帮助理解两者的差异。是两种主流设计模式。
2025-07-26 14:13:09
343
原创 Qt 数据QByteArray与QString处理与转换全指南
的类,支持多语言文本处理(如中文、日文等)。它内部使用 UTF-16 编码,提供了丰富的字符串操作方法。,但提供了更多便捷的方法和 Qt 的内存管理优化。(如字节数组)的类。它类似于 C++ 的。是 Qt 中用于存储。是 Qt 中用于存储。
2025-07-23 14:16:16
841
原创 QT记事本项目——使用事件过滤器实现Ctrl+滚轮字体缩放功能
Qt的事件系统是GUI应用程序的核心机制,所有用户交互(鼠标点击、键盘输入、窗口重绘等)都是通过事件来处理的。原理:所有发送到textEdit的事件会先经过Widget的。:让当前Widget对象监听textEdit的事件。:无需创建新类,直接在现有架构中添加功能。不能直接检测"Ctrl+滚轮"组合事件。:获取垂直滚动量(正值上滚,负值下滚)是滚轮事件且Ctrl按下 → 处理缩放。:需要创建新类,破坏原有代码结构。:事件继续传递给目标对象。:事件已处理,不再传递。:监听其他对象的事件。
2025-07-17 14:32:16
321
原创 QT——事件系统详解
QT的事件系统是QT应用程序处理用户交互和系统通知的核心机制。当用户操作或系统事件发生时,QT会创建相应的事件对象,并将其发送到接收事件的窗口部件。
2025-07-16 16:24:02
594
原创 QT——QList的详细讲解
是 Qt 中最常用的容器之一,适合大多数动态数组场景。如果需要更高的随机访问性能,可以考虑。,用于存储和管理一组元素。它类似于 C++ 标准库中的。,但针对 Qt 的使用场景进行了优化,特别是在。如果需要频繁中间插入/删除,可以考虑。是 Qt 框架中一个常用的。
2025-07-15 22:14:47
400
原创 C++——模版(函数模版和类模版)
模板是 C++ 中一种强大的泛型编程机制,允许开发者编写与类型无关的代码,从而提高代码的复用性和灵活性。通过模板,可以避免为不同数据类型重复编写相似的函数或类,实现真正的代码复用。
2025-07-15 20:12:03
359
原创 QT——QComboBox组合框控件
QComboBox是Qt框架中提供的组合框控件,它结合了按钮和下拉列表的功能,允许用户从预定义的选项列表中选择一个或多个项目。
2025-07-15 14:33:48
613
原创 QT——文件选择对话框 QFileDialog
QFileDialog是Qt框架中提供的文件对话框类,用于让用户选择文件或目录。它提供了标准的文件选择界面,支持文件打开、保存、多选等常见操作。
2025-07-15 11:13:13
430
原创 QT——文件操作类 QFile和QTextStream
QFile是Qt框架中用于文件I/O操作的类,继承自QIODevice,提供了文件读写的基本功能。QTextStream提供了方便的文本读写功能,可以处理不同编码的文本文件。:可以获取文件大小、修改日期等信息。:支持文本和二进制文件的读写操作。:支持重命名、移动、删除等操作。:提供错误检测和处理机制。
2025-07-14 20:48:23
424
原创 QT——信号与槽/自定义信号与槽
适用于大多数情况,但缺乏类型安全。Lambda表达式:适合简单逻辑,代码简洁但可能影响可读性。函数指针:类型安全,适合需要编译时检查的场景。自动连接:简化UI与逻辑的连接,适合快速开发但灵活性较低。根据具体需求选择合适的连接方式,可以显著提高开发效率和代码质量。//在构造函数中进行信号与槽的绑定//第二种方式:QObject::connect(sender, SIGNAL(signal()), receiver,
2025-07-14 20:11:35
759
原创 QT——信号与槽的两种界面实现方式
在Qt框架中,是对象间通信的核心机制,用于实现事件驱动的编程模型。它通过解耦信号发射者和接收者,提供了类型安全、灵活且可维护的跨组件通信方式。
2025-07-14 11:41:26
401
原创 C++——多态
多态是C++面向对象编程的核心特性,它通过虚函数和继承实现“一个接口,多种实现”的灵活机制。合理使用多态可以提高代码的复用性、扩展性和可维护性,是编写高质量C++程序的关键。核心概念virtual关键字实现动态绑定。= 0强制派生类实现,形成抽象类。虚函数表:底层机制,支持运行时多态。应用场景:框架设计、插件系统、图形界面等需要灵活扩展的场景。
2025-07-13 15:12:20
845
原创 C++——多重继承/虚继承/菱形继承
多重继承是C++中一种强大但复杂的特性,它允许类从多个基类继承属性和方法。然而,多重继承也带来了二义性和菱形继承等问题,需要通过作用域解析运算符、重写成员函数或虚继承来解决。
2025-07-12 16:11:04
1069
原创 C++——继承及权限/基类构造函数/虚函数
当创建派生类的对象时,基类的构造函数总是在派生类的构造函数之前被调用。这个表格提供了一个快速参考,帮助理解在不同类型的继承中基类成员的访问级别是如何变化的。当 Roadsetr类的对象被创建时,首先调用 Base 类的构造函数,然后调用 Roadsetr类的构造函数。关键字有助于清晰地表达程序员的意图,并利用编译器检查来避免常见的错误,如签名不匹配导致的非预期的函数重写。中,派生类可以通过其构造函数的初始化列表来调用基类的构造函数。:当通过基类的指针或引用调用一个虚函数时,调用的是对象实际类型的函数版本。
2025-07-12 14:52:55
899
原创 C++——静态数据成员和静态成员函数
计数器:统计创建了多少个对象public:常量定义:全类通用的常量值public:工具方法:与对象无关的功能public:单例模式:确保只有一个实例public:if (!
2025-07-12 10:57:40
367
原创 C++——拷贝构造函数详析
在所有这些情况下,如果类包含资源管理(例如,动态内存分配),那么正确地实现拷贝构造函数是非常重要的,以确保资源的正确复制和管理,防止潜在的内存泄漏或其他问题。这样做的目的是防止类的对象被拷贝,从而避免可能导致的问题,如资源重复释放、无意义的资源复制等。引入了移动语义,允许资源(如动态分配的内存)的所有权从一个对象转移到另一个对象,这避免了不必要的拷贝。通过这些方法,你可以确保你的类的对象不会被意外地拷贝,从而避免可能出现的资源管理相关的错误。中的一种特殊的构造函数,用于创建一个新对象作为现有对象的副本。
2025-07-11 22:52:02
1147
原创 C++——析构函数
析构函数特别重要,尤其是在涉及动态分配的资源(如内存、文件句柄、网络连接等)的情。智能指针和其他自动资源管理技术时,可以减少显式编写析构函数的需要,但了解析构函数的工作原理。中的一个特殊的成员函数,它在对象生命周期结束时被自动调用,用于执行对象销毁前的。:当对象的生命周期结束时(例如,一个局部对象的作用域结束,或者使用。编程实践中,确保资源在对象析构时被适当释放是非常关键的。删除 一个动态分配的对象),析构函数会被自动调用。的析构函数被自动调用,负责清理资源,防止内存泄露。期结束时(即离开了它的作用域),
2025-07-11 20:14:14
179
原创 C++——this关键字和new关键字
thisnew特性this关键字new运算符作用指向当前对象动态分配内存返回值当前对象的指针新分配内存的指针使用场景成员函数中访问当前对象需要运行时决定内存分配时内存位置不适用(是指针)堆(heap)生命周期不适用直到显式delete或程序结束错误风险误用可能导致逻辑错误忘记释放导致内存泄漏。
2025-07-11 17:28:49
704
原创 C++——函数重载与运算符重载
函数,只要它们的参数列表不同(参数类型、参数个数或参数顺序不同)即可。编译器会根据调用时提供的参数自动选择最匹配的函数版本。编译器会将函数名与参数类型信息组合成一个唯一的内部名称,使得不同版本的重载函数在编译后具有不同的名称。运算符重载允许为类或结构体类型重新定义C++内置运算符的行为,使它们能够用于用户定义的类型。函数重载是指在同一作用域内,可以定义多个同名。
2025-07-10 12:36:02
641
原创 C++——引用
引用是已存在对象的别名,通过int x = 10;// ref是x的引用引用关键特性必须初始化:引用在声明时必须初始化不可重新绑定:一旦绑定到某个对象,就不能再绑定到其他对象无空引用:引用必须指向有效对象(与指针不同)自动解引用:使用引用时不需要特殊语法,就像使用原变量一样。
2025-07-10 10:51:38
257
原创 C++——从结构体到类与对象
C++ 的面向对象编程(OOP)核心是和。类是用户自定义的数据类型,用于封装数据(属性)和操作数据的方法(行为);对象则是类的实例。本文将从引入,逐步深入讲解 C++ 的类和对象,结合代码和详细说明。在 C 语言中,结构体(struct数据完全公开,无法控制访问权限操作数据的行为(函数)与数据本身分离(结构体仅包含数据,操作需额外函数实现)缺乏数据保护机制,容易导致非法修改C++ 保留了struct,但允许在结构体内定义函数(方法),并支持访问控制(publicprivatestructpublic。
2025-07-09 13:10:10
743
原创 C++——内联函数与Lambda表达式
捕获方式语法描述值捕获[x]创建x的副本,lambda内不能修改原变量引用捕获[&x]通过引用捕获x,lambda内修改会影响原变量隐式值捕获[=]所有外部变量都通过值捕获隐式引用捕获[&]所有外部变量都通过引用捕获混合捕获[=, &x]除x外所有变量值捕获,x引用捕获隐式混合捕获[&, x]除x外所有变量引用捕获,x值捕获this指针捕获[this]捕获当前类的this指针,可以访问成员变量和函数初始化捕获(C++14)[x = expr]用expr初始化x(可以是移动捕获)
2025-07-08 18:52:39
935
原创 C++——数据类型与输入输出
C++的标准输入输出系统是基于流(stream)的概念构建的,提供了类型安全、可扩展的I/O操作方式。与C语言的相比,C++的I/O系统通过运算符重载和面向对象的方式,提供了更灵活、更安全的输入输出机制。C++预定义了四个标准流对象,都定义在std对象类型对应C标准流缓冲情况典型用途cinistreamstdin有缓冲标准输入coutostreamstdout有缓冲标准输出cerrostreamstderr无缓冲错误输出(立即显示)clogostreamstderr。
2025-07-08 16:13:03
773
原创 C++——命名空间
命名空间(Namespace)是C++提供的一种机制,用于将全局作用域划分为不同的命名区域,解决名称冲突问题。它是C++对C语言中全局命名空间污染问题的解决方案。int value;
2025-07-08 15:14:43
361
原创 C++——从C到C++
封装:访问控制(public/private/protected)多态:虚函数、override、final。继承:单继承、多继承、虚继承。
2025-07-08 14:24:05
892
原创 Linux线程——条件变量(pthread_cond)详解
条件变量(Condition Variable)是线程同步的高级机制,它允许线程在特定条件不满足时主动让出CPU,直到其他线程改变条件并发出通知。条件变量总是与互斥锁配合使用,共同解决复杂的线程同步问题。与互斥锁绑定:必须与配合使用,避免竞争条件。线程阻塞与唤醒阻塞等待释放锁并挂起线程,直到被唤醒。唤醒机制:唤醒一个等待线程(由调度策略决定)。:唤醒所有等待线程。虚假唤醒:线程可能被意外唤醒(即使未收到信号),需用while循环检查条件。API功能描述关键参数返回值使用场景初始化条件变量。
2025-07-08 10:29:48
1176
原创 Linux线程——死锁:概念、成因与解决方案
就像两个人在狭窄的走廊相遇,都坚持让对方先通过,结果谁都动不了。自我死锁是开发者在单个线程内就能制造的"死锁",通常由于对同一个非递归锁多次加锁造成。是多线程编程中一种严重的同步错误,指两个或多个线程因争夺资源而陷入无限等待状态,导致所有相关线程都无法继续执行。的形成:每个线程持有一个资源并等待另一个线程释放其持有的资源,形成闭环。锁超时机制为锁操作设置时间上限,就像为会议设置议程时间,避免无限制等待。显示所有线程信息,重点关注阻塞在锁操作的线程。获取完整的线程调用栈,观察锁的获取顺序。
2025-07-07 15:23:49
310
原创 Linux线程——互斥锁
API 名称功能初始化/销毁加锁/解锁非阻塞加锁超时加锁函数属性控制支持(通过功能:动态初始化互斥锁。函数原型参数mutex:指向互斥锁变量的指针。attr:指向互斥锁属性的指针。若为NULL,使用默认属性(普通非递归锁)。返回值成功:返回0。失败:返回错误码(如ENOMEM内存不足,EINVAL参数无效)。示例= 0) {
2025-07-07 13:56:24
767
原创 Linux线程——线程创建与管理常用API总结
在 Linux 下进行线程开发,主要使用 POSIX 提供的pthread库。pthreadAPI 涵盖了线程的整个生命周期管理以及线程间同步与通信等功能。和。其中,线程管理类函数包括(创建线程)、(等待线程结束)、(线程退出)、(分离线程)等,主要负责线程的创建、运行与回收;同步机制类函数如(互斥锁)、(条件变量)等用于协调多个线程对共享资源的安全访问;而线程控制类函数如(线程取消)、(获取线程 ID)、(设置可取消状态)等,则提供了对线程行为的细粒度控制。
2025-07-06 15:03:17
689
原创 Linux线程——基础全解
线程是程序执行的最小单位。即线程(Thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一个进程可以并发多个线程,每个线程执行不同的任务。一个进程中可以包含多个线程,这些线程共享进程的资源,但独立执行不同的任务。
2025-07-06 11:29:45
1314
原创 进程间通信——信号量
减少信号量的值(P操作),通常为-1。:增加信号量的值(V操作),通常为1。= P操作(申请资源,值减1)= V操作(释放资源,值加1)如果信号量值不够减,默认会阻塞。示例2:获取和修改信号量属性。示例1:创建并初始化信号量。:信号量集中信号量的数量。:等待信号量值变为0。
2025-07-05 16:12:42
1316
原创 进程间通信——信号
printf("收到信号: %d\n", sig);// 注册自定义处理函数优先使用sigaction:比signal更安全可靠保持处理函数简单:只设置标志位,不做复杂操作使用专用通信信号结合共享内存:实现高效数据传输处理SIGCHLD:避免僵尸进程检查EINTR:处理被中断的系统调用多线程中使用pthread_sigmask。
2025-07-05 11:29:28
670
原创 进程间通信——共享内存
创建流程ftok→shmget→shmat→ 使用 →shmdt→shmctl(删除)连接技巧// 只读模式连接(保护数据)// 指定地址连接(特殊需求)实时监控命令# 查看共享内存ipcs -m# 删除所有共享内存(危险!ipcrm -a大小限制检查# 查看系统限制cat /proc/sys/kernel/shmmax # 最大单块内存cat /proc/sys/kernel/shmall # 总内存限制📌终极提示:共享内存像一把双刃剑 - 用好了速度飞起,用错了灾难重重。
2025-07-03 11:00:12
953
原创 进程间通信——消息队列
消息队列是一种进程间通信(IPC)机制,允许不同进程之间以消息的形式交换数据。消息队列是基于内核实现的,具有以下特点:以消息为单位传递数据(结构化)可以异步通信,发送方和接收方不需要同时运行支持无亲缘关系的进程通信消息带有类型,可按类型读取支持异步通信可传输结构化数据支持任意进程间通信(无须亲缘关系)
2025-07-02 21:37:25
279
原创 进程间通信——管道
比较项无名管道命名管道(FIFO)通信进程仅限亲缘关系进程无亲缘进程皆可是否命名否是(存在于文件系统)通信方向单向单向使用方式pipe()mkfifo()open()是否持久化进程结束即消失文件形式可持久存在。
2025-07-02 15:25:52
236
原创 进程间通信方法总结
通信方式是否可跨进程是否需亲缘关系通信效率数据同步特点说明无名管道否是中不需简单、单向、父子通信命名管道是否中不需单向、需显式创建消息队列是否中需有类型、结构化、较灵活共享内存是否高需快速、高效、需同步机制信号是否低不适用通知机制、无数据传输信号量是否高是同步工具,无数据传输套接字是否中不需网络通信首选,可跨主机内存映射文件是否高需文件+共享内存,效率高。
2025-07-02 11:02:33
811
Linux环境下基于Ncurses开发简易贪吃蛇小游戏
2025-05-10
机器视觉-双目测量、极线表示、基本矩阵求解代码
2024-07-12
机器视觉-传统相机标定法、线性求解P矩阵代码
2024-07-12
工程伦理分析PPT-大众汽车排放门事件
2024-07-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人