- 博客(67)
- 收藏
- 关注
原创 C++ 字符处理、编码格式
操作系统编码(如 Windows 的 ACP、Linux 的 LANG)决定了:默认的字符集(如 Windows 中文版默认 GBK,Linux 通常 UTF-8)。系统 API 的行为(如 MessageBoxA 按 ANSI 编码解析字符串)。文本编辑器编码决定的是:文件在磁盘上的存储格式(如 UTF-8、GBK、UTF-16)。如何解析文件内容(避免乱码)
2025-03-28 13:54:32
1021
原创 MFC中的窗口线程安全性与CWnd类
(1)定义消息ID# define WM_SEND_XXX(WM_USER + 1) // WM_USER 是系统预留的自定义消息起点1# define WM_SEND_XXX(WM_USER + 1) // WM_USER 是系统预留的自定义消息起点作用:定义一个唯一的消息标识符,避免与系统消息冲突。为什么用 WM_USER: 0x0400(WM_USER)Windows 保留0x0000 - 0x03FF ,0x0400 (WM_USER) - 0x7FFF是可以自定义使用的范围。
2025-03-25 17:00:24
724
原创 程序编译和执行的流程,初步了解
语法树的节点表示语法规则(如函数定义、返回语句、二元表达式等)。当用户双击一个 .exe 文件或在命令行中执行时,Windows 操作系统的加载器(Loader)会负责加载该可执行文件。使用静态链接库(.lib 文件)而不是动态链接库(.dll 文件),在编译时,将库的代码直接合并到 .exe 文件中。在链接过程中,链接器会将各个目标文件(.o 或 .obj)的 段(Section) 进行整合。各个目标文件的代码区 和 全局区 的布局在编译时确定,而最终(在.exe中)所处的位置在链接时确定。
2025-03-20 13:24:59
729
原创 Linux(socket网络编程)UDP---初学
(3)TCP中套接字是一对一关系,服务端为了和多个客户端通信,要建立多个用于通信的套接字。src_addr:指向存储发送方地址的sockaddr结构的指针。dest_addr:指向包含目标地址的sockaddr结构的指针。MSG_WAITALL:等待接收完整的消息(仅用于TCP)。addrlen:指向存储src_addr长度的变量的指针。2.创建地址结构体,结构体要设置服务器的IP和端口号。3.sendto用于发送;返回值:成功时返回发送的字节数,失败返回-1。addrlen:dest_addr的长度。
2025-02-16 11:53:37
311
原创 Linux(socket网络编程)I/O缓冲、三次握手、四次挥手
(4)上述的状态变化,是基于一个正常完成的TCP三次握手,那要是中间出现什么问题了,比如服务端回复了SYN+ACK,客户端迟迟没有回复ACK;,即客户端伪造很多SYN向服务端请求连接,但刻意不完成第三次握手,占用服务端的连接表、内存等资源。》启用SYN Cookie:服务端接受SYN时不立刻分配内存资源,而是收到客户端的ACK后,验证完成后,才分配内存资源。(2)建立完成后,在后续的数据传递过程中,SEQ也会继续跟随数据段发送,继续递增,用来记录数据段的顺序。没错,各自发送的SEQ值是不一样的。
2025-02-13 14:49:30
1117
原创 Linux(socket网络编程)TCP连接
//绑定IP、端口 memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr("0.0.0.0"); addr.sin_port = htons(8888); int ret = bind(server, (struct sockaddr*)&addr, sizeof(addr)); if (ret == -1) { close(server); return;
2025-02-12 20:56:31
952
原创 常量成员函数(C++)
1》提高代码的可读性和安全性,通常用于getter(访问器)方法。2》在多线程编程中,通过const成员函数来避免数据竞争。当然了,不是成员变量就可以修改,(但有什么意义呢…常量成员函数不允许修改成员变量的值;表示该函数不会修改类的成员变量。
2025-01-18 12:50:26
218
原创 C++ 类型转换
向上转型时,比如基类中有成员变量共占12字节,派生类的成员变量占4字节;由于通过基类指针只能访问基类的成员变量,那么就不会出现访问超过目标对象的内存范围的情况;向下转型时,通过派生类指针要访问属于派生类的成员变量,就属于非法访问了;因为目标对象是基类,根本就没有创建派生的成员变量,这时候访问,得到的就是一个未知的数;由此可见,把4字节的int类型转换为1字节的char、2字节的short类型时,从汇编的视角来看,其实只是在传递值的时候,更改了指针的类型来实现了强制转换;
2025-01-16 16:44:36
804
原创 C++ 多态 初学笔记
当基类构造函数中调用虚函数,此时由于派生类还没有构造,所以这个时候的虚函数还是静态绑定,调用的时基类的虚函数当派生类构造后,由于派生类中重写了虚函数,所以这个时候虚函数变成了动态绑定,调用的就是派生类重写的虚函数析构时,当派生类析构以后,派生类重写的虚函数也随之消失,再调用(在基类的析构函数中调用)虚函数时,调用的是基类的虚函数;(这里又变成了静态绑定)
2025-01-15 23:59:29
792
原创 C++ 指针数组、数组指针,指针常量、常量指针
指针常量,由于指针本身是个常量,所以无法更改,只能初始化的时候赋值;指针数组是一个数组,元素都是指针类型。数组指针是一个指针,一个指针,一个;
2025-01-15 14:47:32
156
原创 类 继承
当基类构造函数中调用虚函数,此时由于派生类还没有构造,所以这个时候的虚函数还是静态绑定,调用的时基类的虚函数当派生类构造后,由于派生类中重写了虚函数,所以这个时候虚函数变成了动态绑定,调用的就是派生类重写的虚函数析构时,当派生类析构以后,派生类重写的虚函数也随之消失,再调用(在基类的析构函数中调用)虚函数时,调用的是基类的虚函数;(这里又变成了静态绑定)
2025-01-14 18:58:12
686
原创 malloc 和 new 的区别
并且呢,这个malloc也是可以用来给类分配内存的,但是,仅可以说是这个例子是可以了,类的情况一但复杂,对于普通的数据类型来说free和delete没有什么区别,delete和delete[]没有什么区别。而delete[]不仅释放内存空间,而delete还会调用析构函数。delete仅仅是释放内存空间。malloc和new没有区别。还会调用每一个元素的析构函数。且调用第一个元素的析构函数。对于普通的数据类型来说。对于普通的数据类型来说。free仅是释放内存。
2025-01-13 21:43:41
316
原创 友元类 嵌套类
如果把 被嵌套类 的声明细节 写到外层类中,会显得臃肿;所以可以选择把 被嵌套类写到外面(要加作用域,也就是外层类的名称:: ),而外层类里面只写一个。
2025-01-13 21:20:57
352
原创 类 静态成员
*(3)类的静态成员函数不能是const;**已经有static了,再加const是没有必要的。(3)静态成员变量的作用域属于类,但静态成员变量的内存空间不属于类;C++17新语法允许在类的说明里面定义(要加inline关键字)int MyClass::a = 1;
2025-01-13 17:30:29
307
原创 联合编程(C语言和C++);编译器 ---入门
链接属性:内部链接属性:该名称仅仅在本转换单元中有效 const,static外部链接属性:该名称在其他的转换单元中也有效 extern,inline 无链接属性:该名称仅仅能够用于该名称的作用域内访问
2025-01-12 16:25:26
968
原创 C/C++进阶-函数
(2.2)还有const、static等关键字,直接让函数模板变得极其复杂。(2.3)并且,在函数的实现里,诸如运算、赋值等操作,面对传入进来的是指针、常量等情况,在使用时需要非常注意。
2025-01-08 14:40:55
1076
原创 Qt C++读取json文件
1.1 使用QFile打开文件1.2 使用QByteArray保存文件内容Q1.3 可以关闭文件了2.检查读取的这个文件是否符合json规范2.1 使用QJsonDocument类对内容进行一次转换:QByteArray —》 QJsonDocument,将转换中可能出现的异常抛给QJsonParseError;3.通过QJsonObject类、QJsonValue类、QJsonArray类,从“doc”中取获取我们想要的内容;这个obj对应在.json文件中的内容就是“{}”下的内容比如
2024-05-13 15:44:18
415
原创 IEC61850——智能电力系统通用标准
IEC61850:是一种电力系统自动化领域的国际标准,它定义了变电站设备之间的通信方式,以及相关的数据模型和接口。MMS:制造报文规范(Manufacturing Message Specification),是一种用于工业自动化系统通信的技术规范。CMS:内容管理系统(Content Management System),在电力行业中,特指国网新制定的国产61850 (CMS)协议。那么其实呢,IEC61850就是一个用在变电站及类似场景的协议。第一点。
2024-04-29 21:34:36
6533
原创 MODBUS
从响应:03 AA BB CC,前8位表长度(单位是八位,这里是03,就是说后面有3个八位),后面是数据值(不是地址),这里主收到从响应后,根据其询问的地址去改数据值------就是说这里问答必须是一一对应的。这个区域用于存储只读的数据,如传感器的温度数据等。这个区域存储的是可读可写的16位寄存器类型的数据,例如设置的密码等。事务处理标识箱* | 协议标识符* | 长度 | 单元标识符* | 功能码 | 数据 |主问询:00 00 00 0F,前16位是开始地址,后16位是连续问的长度。
2024-04-23 20:37:30
788
原创 TCP协议学习记录
一种编程抽象编写程序时,利用socket可以使用TCP;假设现在已经将TCP协议的规范用代码编写好了,只需要去使用它,就可以通过socket去使用;
2024-04-21 19:47:25
363
原创 Error:bool QCustomPlot::removeItem(QCPAbstractItem*) item not in list: 70055640
在QCustomPlot继承类的析构函数中removeItem掉QPointer< QCPItemTracer>、QPointer< QCPItemText> 等类。或者delete掉创建QPointer类的实例,当然创建了QPointer的类也要在析构函数中进行removeItem;使用Qt C++ /QCustomPlot,出现bool QCustomPlot::removeItem(QCPAbstractItem*) item not in list: 70055640的报错,
2024-03-30 23:34:01
386
原创 跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)
XxwTracer用于在图表中显示鼠标所在位置的x,y值XxwTraceLine用于在图中显示水平或垂直的虚线头文件XxwTracer.h////// \brief The XxwTracer class:在图表中显示鼠标所在位置的x,y值的追踪显示器///Q_OBJECTpublic:XAxisTracer,//依附在x轴上显示x值YAxisTracer,//依附在y轴上显示y值DataTracer//在图中显示x,y值protected://是否可见//类型。
2023-12-15 18:19:39
831
原创 Qt Creator 11.0.3同时使用Qt6.5和Qt5.14.2
有时为了针对不同版本的源码或是需求,需要即使用Qt6.xx,又要用Qt6.xx。安装Qt时,一般会同时安装Qt Creator这款IDE作为开发平台。而安装不同的Qt版本时,配套会安装上不同版本的Qt Creator。**在同一台电脑上使用多个版本的Qt Creator可能会导致卡顿等问题,并且也不方便****于是,就需要在同一个Qt Creator上使用不同的Qt版本**
2023-12-02 17:48:19
3777
原创 nullptr和NULL的区别
1.表示空指针:当一个变量或对象被声明为指向某个类型的指针,但没有初始化为指向任何对象时,可以使用nullptr来表示这个空指针。2.表示不存在的元素:当访问数组或结构体中的不存在的元素时,可以使用nullptr来表示这个元素不存在。nullptr是一个空指针类型,而NULL是一个整数类型(通常为0)。在表示空指针或空对象时, 推荐使用nullptr。而NULL就当做0使用就好。
2023-11-12 00:54:46
442
原创 qt creator 11.02 debug symbols和qt creator 11 .0.2 plugin development各自的特点
Debug Symbols 是用于调试和故障排除的工具,它可以帮助定位代码中的错误和异常行为。Qt Creator 11.02 提供了更好的调试支持,包括 Debug Symbols 功能,以提供更好的调试体验和错误排查能力。Qt Creator 11.0.2 支持插件开发,使开发人员能够扩展 Qt Creator 的功能,满足特定需求,并提高开发效率。
2023-09-20 17:59:11
957
原创 Qt 用什么类型的文件存放日志
SQLite数据库文件(SQLite Database File):与你提到的数据库相似,可以使用Qt提供的QtSql模块连接和操作SQLite数据库文件,将每条日志保存为数据库表中的一条记录,并可以使用SQL语句进行查询和管理。XML文件(XML File):将日志以XML格式保存在文件中,每条日志作为一个节点,可以使用Qt提供的QXmlStreamReader和QXmlStreamWriter等类进行解析和生成,方便进行查询和管理。CSV文件可以使用Qt的文件读写操作进行查询和管理。
2023-09-19 17:53:49
252
原创 centos7怎么解压zip文件(以及如何联网)
3.也可指定解压后文件放在哪儿:unzip xx.zip -d /xx/xx/xx。1.首先要切换到压缩包所在的文件目录:cd 后跟文件目录。2.使用unzip进行解压缩:unzip 后跟文件名。安装压缩和解压(zip and unzip)工具。注意点:NAT、DHCP。
2023-09-15 16:42:12
1186
原创 Linux的Qt编译出现:-1: error: cannot find -lGL问题的解决方法
在将windows平台上开发的Qt界面程序移植到Linux Ubuntu系统中,在构建项目时出现以下编译问题: error: cannot find -lGL。但是 Qt 在链接阶段查找的 OpenGL 链接库是不带版本号的。因此,可以在 /usr/lib/ 目录下为 OpenGL 链接库创建一个链接。Qt是支持跨平台的C++图形用户界面应用程序开发框架,在一个平台上开发好应用程序可以在多个平台方便移植。Ubuntu自带的 OpenGL 链接库在后缀中添加了版本号,例如。即,没找到libGL.so 库。
2023-09-14 21:03:05
6600
2
原创 QT--SQLite:查询、添加
然后使用prepare函数添加要执行的语句,这里可以像上面一样通过bindValue添加变量,也可以通过字符串直接添加(注释所示) ,这里我的两个Number数据类型是integer,如果数据类型是text,则需要将内容用单引号’ '引上。qt关于sqlite的简单内容就这些,增删改查,用到的类和函数只有几个,唯一需要注意的就是sql语句了,毕竟错了编译器检查不出来,要细心点。最后通过exec函数执行,next函数进行移动,value函数获取内容,这样就通过遍历获取到了所查询的内容。
2023-09-13 23:34:05
1282
原创 Qt---SQLite
使用函数addDatabase()创建QSqlDatabase对象时只是设置了驱动程序名称,设置的connection Name会被自动添加到应用程序的数据库连接名称列表。Qt数据库编程中会用到模型/视图结构,例如用一个QSqlTableModel模型表示一个数据表的数据,然后用一个QTableView组件显示这个QSqlTableModel模型的数据。前面步骤只是加载了数据库驱动,创建了连接,想要打开一个具体的数据库,还需要设置连接数据库的参数,例如数据库名称、用户名、用户密码等。
2023-08-10 18:00:58
146
原创 LwIP---基础
#### pbuf.c 实现了LwIP对网络数据包的各种操作。网络数据包在LwIP内核中以pbuf结构体的形式存在,这提高了LwIP内核对数据包的处理速率,也提高了数据包在各层之间的递交效率。pbuf结构体也是我们使用RAW/Callback API进行网络应用程序开发的关键。 #### raw.c 实现了一个传输层协议的框架,我们可以在该文件的基础上修改和添加代码,实现自定义的传输层协议。与UDP/TCP一样,它可以与IP层直接进行交互,这类似于RAW Socket。在实际应用中,我们常使用UDP
2023-08-07 17:28:11
250
原创 自动驾驶1
其原理是采用惯性定律实现的,这些传感器从超小型的的MEMS传感器,到测量精度非常高的激光陀螺,无论尺寸只有几个毫米的MEMS传感器,到直径几近半米的光纤器件采用的都是这一原理。最基础的惯性传感器包括加速度计和角速度计(陀螺仪),他们是惯性系统的核心部件,是影响惯性系统性能的主要因素。超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t(秒),就可以计算出发射点距障碍物的距离(s),即:s=340t/2)特点:障碍物识别,准确率高。
2023-07-20 00:07:59
173
原创 QTableWidgetItem通过界面修改值和通过settext修改值的区别
通过setText()方法修改值是在代码中通过调用QTableWidgetItem的setText()方法来修改单元格的值。这种方式适用于在程序运行过程中动态修改表格数据的情况,比如根据用户的操作或者其他条件来更新表格内容。这种方式可以在不显示表格的情况下进行修改,但是需要手动触发更新操作,比如调用表格的update()方法或者重新设置表格的数据模型。通过界面修改值是指用户直接在表格中进行编辑操作,比如双击单元格进入编辑模式,然后通过键盘输入新的值。用户可以通过按下回车键或者切换到其他单元格来确认修改。
2023-07-05 09:06:20
1356
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人