![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 51
鱼非愚
真正的高贵是优于曾经的自己
展开
-
ES32中OTA空中升级
ESP32的空中升级测试及问题分析原创 2023-03-06 09:00:00 · 1913 阅读 · 1 评论 -
目录操作函数
c++对目录文件操作函数的应用原创 2022-10-09 15:11:43 · 759 阅读 · 0 评论 -
C和C++面试问题总结
c/c++面试问题整理原创 2022-09-27 17:45:55 · 1399 阅读 · 1 评论 -
c/c++指针和引用
c/c++指针和引用的使用原创 2022-09-16 14:13:39 · 415 阅读 · 0 评论 -
c++力扣算法题
力扣题解原创 2022-09-14 17:48:46 · 395 阅读 · 0 评论 -
Base64编解码类
Base64的原理:解析一:就是把3个8位的char,通过位运算,变成4个6位的char。再经过高两位,也就是把256个选择变成了64个选择。而64个刚好是ASCII码中可以用来输出的64个字符,大小写英文字母52个+10个数字+两个特殊字符‘+’和‘/’,。解析二:Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。总结:用一句话来说明Base6原创 2022-05-05 11:02:10 · 309 阅读 · 0 评论 -
时间转换类
#ifndef _MSTIME_HH_#define _MSTIME_HH_#include <time.h>#include <iostream>#include <string>#include <string.h>#include <unistd.h>#include <pthread.h>#include <thread>#include <sys/time.h>#includ.原创 2022-03-28 11:02:05 · 275 阅读 · 0 评论 -
C++ explicit关键字详解
首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { public: char *_pstr; int _s转载 2022-03-23 16:09:20 · 79 阅读 · 0 评论 -
定时回调函数类
#ifndef _TASKTIMER_H#define _TASKTIMER_H#include <iostream>#ifdef WIN32#include <windows.h>#else#include <unistd.h>#include <sys/time.h>#include <netinet/in.h>#include <pthread.h>#endif //定义回调函数typedef...原创 2021-11-26 17:00:50 · 128 阅读 · 0 评论 -
定时器--回调函数
回调函数讲解参考这篇#ifndef _TASKTIMER_H#define _TASKTIMER_H#include <iostream>#ifdef WIN32#include <windows.h>#else#include <unistd.h>#include <sys/time.h>#include <netinet/in.h>#include <pthread.h>#endif//定义回调函数原创 2021-11-26 17:00:26 · 1360 阅读 · 0 评论 -
获取网卡信息并使用(带分级颜色)LOG打印
#ifndef _BSTAR_LOG_H#define _BSTAR_LOG_H#ifdef __cplusplusextern "C" {#endif#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <libgen.h>#include <string.h>#define EXPORT_API __attribute__((visibili.原创 2021-11-10 20:04:03 · 159 阅读 · 0 评论 -
进程信号(sysclock)TestMain
主要对前面发的几篇做一个demo总测试#ifndef BCFSTATUSTYPE_HPP_#define BCFSTATUSTYPE_HPP_#include <vector>namespace BCF{ /** 状态值类型声明\n * BCF提供的所有接口,当需要用函数的返回值来表示不同的执行结果时,\n * 需将函数的返回值声明为StatusType */ enum StatusType { ST_OK =原创 2021-11-08 20:05:56 · 149 阅读 · 0 评论 -
系统精确时钟类(系统时间获取)
#ifndef BCFSYSCLOCK_HPP_#define BCFSYSCLOCK_HPP_#include <time.h>#include <sys/time.h>namespace BCF{ /** 系统精确时钟类,该类提供系统时钟相关的函数\n * 可用于相对时间的处理 */ class BCFSysClock { public: static int getOSUpTime(int* pSec, int* p..原创 2021-11-05 14:32:49 · 144 阅读 · 0 评论 -
字符串转换和处理工具类
#include <string>#include <vector>#include <map>#include <sstream>namespace BCF{ /** 字符串转换和处理工具类\n * 上层调用该类方法无须声明其实例,接口均是static成员函数. */ class String { public: typedef int (*Func)(int c); /** .原创 2021-10-29 16:36:48 · 203 阅读 · 0 评论 -
多进程间信号量类(详细版)
多进程间共享的信号量类定义#ifndef BCFPROCESSSEM_HPP_#define BCFPROCESSSEM_HPP_#include <string>#include "BCFStatusType.hpp"#include <semaphore.h>#include <fcntl.h>namespace BCF{ /** BCF信号量类定义\n * 用于多进程间共享 */ class BCFProcessSe原创 2021-11-03 15:34:19 · 260 阅读 · 0 评论 -
创建进程类
//=========================================== 15 16 void error(const char *message) 17 { 18 perror(message); 19 exit(-1); 20 } 21 22 //========================================== 23 //main function wait the Ctrl+\ to quit 24 //wai.原创 2021-11-01 20:11:18 · 81 阅读 · 0 评论 -
c++用于计算时间差异的类
#include <iostream> 2 #include <sys/socket.h> 3 #include <sys/epoll.h> 4 #include <netinet/in.h> 5 #include <arpa/inet.h> 6 #include <fcntl.h> 7 #include <unistd.h> 8 #include <stdio.h> 9 #in.原创 2021-10-26 18:03:39 · 166 阅读 · 0 评论 -
编译出错总结
一、类型匹配问题:1、incompatible types in assignment of ‘char*’ to ‘char [64]’可以使用strcpy();解决。2、error: assigning to an array from an initializer list//不能对数组赋值,只能对数组元素初始化或赋值。3、[Error] ‘f’ was not declared in this scopef 没有进行声明...原创 2021-10-21 13:30:35 · 8373 阅读 · 0 评论 -
子字符串的获取与常见字符操作函数总结
先展示一段子字符串获取函数主要使用到下面介绍的strstr。#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;int getSubstrFromString(const char *buff, const char *starts, const char *ends, char *result, un.原创 2021-09-24 17:17:45 · 1276 阅读 · 0 评论 -
c++实现带锁的线程池类
话不多说上代码:线程锁类:#pragma once#include <pthread.h>#include <unistd.h>namespace lock_summary{ class ILock { public: ILock(){} virtual ~ILock(){} public: virtual void lock() = 0; virtual void unlock() =原创 2021-09-15 20:15:16 · 160 阅读 · 1 评论 -
C++11 auto、declty和peLambda表达式特性
C++11新特性一 智能指针和智能指针自实现智能指针是C++11中新特性,c++11 —> c++ 2011C++14 — C++ 2014 c++17 — C++ 2017智能指针在C++库中也是类模板之一实际上将指针封装在一个类,通过对象来管理指针作用主要用来管理内存,在c++中,是一种管理资源,避免泄露内存的习惯用法,也称RAII(资源获取及初始化)在使用系统提供的智能指针class A{public: A() { cout <&l原创 2021-01-11 09:35:18 · 175 阅读 · 0 评论 -
c++异常处理
在设计程序时,通常程序也会出错,程序的错误可以分为三种:语法错误,逻辑错误和运行时错误语法错误发生在编译和链接阶段逻辑错误是我们在编写的代码思路有问题,达不到需求目标。通过调试来解决调试方式:通过打印信息-- printf 或者 通过IDE调试跟踪查看栈信息运行时错误是指程序在运行期间发生的错误,C语言 --- perror在C++,为了更好运行和维护,引入异常(Exception)机制,让我们能够捕获运行时错误,给程序一次最后说话机会1 捕获异常在C++中,可能借助异常机制来捕原创 2021-09-13 19:52:43 · 464 阅读 · 0 评论 -
(C++)的数据类型转换
C语言类型隐式----自动转换char a = 'a';int b = a;显示---强制转换 ---- () ----不管目标类型是什么,都可以将源类型转换过去,属于比较暴力行为int a = 100;char b = (char)a;C++,除了继承C语言中的类型转换之外(不推荐),还提供四种类型转换方式static_cast 静态类型转换,它大多数情况下,跟C语言类型转换差不多reinterpret_cast 重新解释强制类型转换,一般指针使用dynami原创 2021-09-10 17:52:02 · 4340 阅读 · 0 评论 -
泛型编程之类模板
1 类模板基本使用(代码中解析)类模板与函数模板的定义和使用类似类模板中的泛型是指类中成员变量类型和成员函数中参数的类型语法:template <class T>class Test{ public: Test(T a,T b) { this->a = a; this->b = b; } private: T a; T b; };temp原创 2021-09-09 19:31:36 · 175 阅读 · 0 评论 -
泛型编程、函数模板与重载
1 泛型编程介绍泛型是指具有在多种数据类型上皆可以操作含义。在C++中,为了对类型的封装,引入泛型编程概念。STL(标准模板库)是典型的泛型编程2 泛型编程的分类通常分为两种:函数模板和类模板函数模板是一种特殊的函数,可通过不同类型来进行调用 ,而函数模板是C++中重要的代码复用方式。语法格式:函数模板中的类型指定方式:template <typename T>template <class T>T 它代表的是泛型,大家已经习惯使用T,也可以使原创 2021-09-07 10:54:30 · 149 阅读 · 0 评论 -
类的三大特性---多态
2.1 多态的概述在生活中,也有各种各样的多态情景:比如,当班主任说,8:50分钟,同学们要进直播间,上课,同学们分别进入各班级的直播间。多态意义:C++中所谓的多态(Polymorphism)是指,是由继承而产生的相关的不同的类,其对象对同一个消息会作不同响应。意义在于能增加程序的灵活性,可以减轻系统升级,维护,调用的工作量和复杂度,程序的可扩展性会大大增强。比如:在设计动物类时,会设计比如吃,睡觉等方法,对于现在的条件,只能领养狗动物类:吃,睡觉狗类等五年后,发财原创 2021-09-03 10:14:46 · 237 阅读 · 0 评论 -
虚继承及其使用
虚继承也是多继承的一扩展,它可以很好解决(三角问题)在C++K ,能用类来解决问题,不要用组合能用类和组合来解决问题,不要用继承能用单继承解决,不要多继承组合:电脑类包含了cpu,硬盘,内存,它们又都是一个独立的类,而他们又是电脑类中 的一个成员变量虚继承语法:在继承过程中,在继承方式之前增加关键字(virtual)class 派生类: virtual pubic 基类{ };虚继承分析:代码://虚基类:被虚继承类,通常叫作虚基类class A /原创 2021-09-02 20:28:12 · 359 阅读 · 0 评论 -
类的继承性
c++中类有三大特性:封装性 继承性和多态性继承目的:在C++中,继承最主要的目的是提供代码的可重用性继承:如何判断类与类之间存在着继承呢?可通过类与类之间的关系:is-a如果两个类存在is-a的关系,那么,它们就可以使用继承has -- a 是一种包含和组合的关系,比如:电脑包含CPU,主板,硬盘1 继承与组合及继承方式语法:父类(基类)子类(派生类)class 派生类:[继承方式] 基类名{ 派生类}继承方式:private(默认继承方式) --- 私有继原创 2021-09-01 16:36:35 · 509 阅读 · 0 评论 -
运算符(操作符--operator)重载
运算符(操作符--operator)重载引入分析对于基于数据类型---intint i;int j;int k = i + j; //ok,因为在C编译器,已经封装了运算符的含义(重载),在原始的计算中,+ - ...,只能做数学运算,但是在C语言,能够进行两个变量的加或者减,所以说C语言赋给了运算符的新的意义,但是本质上还是做它的运算符,C语言中,这种技术,并没有开放给设计者。在C++中,通常是以自定义的类型来开发,A a1;A a2;A a3 = a1 + a2; //如果可.原创 2021-08-26 20:15:44 · 2102 阅读 · 0 评论 -
类的设计及友元函数的引入
类的设计运算符重载函数类类型 成员变量普通 成员变量const 成员变量static 成员变量对于一个类而言,对象之间的数据共享,可以使用static在实际上,一个类不可能实现一个系统,那么,类与类之间必须存在着一定关系1)在一个类中,会访问另一个类的成员 ---- use a2) 在一个类中,会包含一个类的成员 ----- have a3) 在一个类设计时,它继承于某个类 ---...原创 2021-08-18 19:21:55 · 102 阅读 · 0 评论 -
对象数组及类成员变量实际存储方式
一、对象数组类是一种类型,也可以用它来声明数据比如 Test t1,t2,t3;Test tarray[ ] = {t1,t2,t3};int main(){ int i,j,k; Test t1,t2,t3; int a[] = {1,2,3}; Test array[] = {t1,t2,t3}; //在c++中,通常不会去定义一个类类型的数组, array[0].printT(); Test array1[] = {Test原创 2021-08-20 16:12:24 · 386 阅读 · 0 评论 -
const和 static在C++中的应用
1 const 修饰数据成员比如:const int a; const Test t;如果做为类的数据时,必须初始化,可以在类中声明时进行(const int t2 = 100;),但是,不推荐 或者构造函数初始化列表(这是在类对象之前唯一一次改变const成员的值的机会)2 const修饰成员函数语法: 函数返回值类型 函数名(参数列表)const { }意义:const 成员函数,承诺本函数不会修改类内的数据成员, 且不会调用其它非const成员函数class T.原创 2021-08-23 17:25:33 · 157 阅读 · 0 评论 -
C++中构造与析构函数
一、构造函数1、构造函数也是函数的一种, 构造函数的主要任务就是初始化类中成员变量在C++中,通过一个类去创建对象时,那么编译器会完成两个工作:1)给对象分配一块内存,类似于int i2)C++编译器强行调用构造函数,并且为隐式调用2、构造函数的语法特点:构造函数的函数名必须跟类名 构造函数无返回值 当我们创建类对象的时,构造函数会被自动调用,无需我们主动调用一个类中,可以有多个构造函数,构造函数之间可构成函数重载的关系无参构造函数有参构造函数clas..原创 2021-08-16 20:40:54 · 852 阅读 · 0 评论 -
文件属性获取及open函数
int open(const char*pathname,int flags);int open(const char*pathname,int flags,mode_t mode);参数说明:1.pathname要打开或创建的目标文件2.flags打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成falgs参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR: 读,写打开这三个常量,必须制定一个且只能指定一个原创 2021-08-13 17:04:21 · 436 阅读 · 0 评论 -
字符串类型转换(例QT)
字符串拼接:QString str="test1";str += "test2";str += 'A';str.append("test3");qDebug() << str << endl;QString-->char*:char* MainWindow::QstringtoChar(QString str){ QByteArray ba2; ba2.append(str); //也可以 ba2 = s2.to原创 2021-08-11 19:00:35 · 341 阅读 · 0 评论 -
QT按钮类及定时器应用
一 按钮类点击按钮:QPushButton QToolButton单选按钮:QRadioButton复选按钮:QCheckBox对于按钮类来说,使能(enable)属性使用比较常见。该属性也有一对接口:set/getui->testButton->setEnabled(false);ui->testButton->isEnabled();对于按钮来说,使用一个按钮来实现两种状态,这种逻辑也是比较常见,比如:照明开关void MainWindow:原创 2021-08-06 17:20:53 · 1576 阅读 · 0 评论 -
c/c++字符串操作函数及用法详解
1.strlen()函数函数声明原型: 函数功能:计算指定的字符串string的长度。strlen函数实现:size_t strlen(const char *string);size_t my_strlen1(const char* string){ assert(string); size_t count = 0; while (*string++) { count++; } return count;}size_t my_strlen2(const char*原创 2021-08-04 10:07:33 · 5951 阅读 · 3 评论 -
QT中同界面添加多个组件窗口
1、打开Qt Creator,新建一个Qt Widgets Application项目,添加控件Stacked Widget和PushButton,然后再添加3个子窗口类子窗口类可有自己任意定义,创建好后将头文件引入主窗口类,并定义子类的对象为主类私有变量,方便成员函数访问。MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow){ u.原创 2021-08-03 20:08:58 · 6215 阅读 · 1 评论 -
解析复杂的json数组嵌套
[{"chanNameList": [{"channelName": "通道1","enable": 1,"perX": 0,"perY": 0,"rgbaBG": "#00000000","rgbaFont": "#00000000"}],"channel": 1,"ip": "192.168.121.13","status": 1,"streamInfo": [{"IFrameInterval": 50,"aBitrate": 6.原创 2021-07-30 14:56:28 · 7390 阅读 · 0 评论 -
QT开发入门详解
一、qt中QString类功能:显示一个字符串内容常用的接口函数1)构造函数QString(const char *str) ------> QString str = QString("hello");QString(const QString &other) ----> QString str2 = str; QString & operator=(const QString &other) 比如:QSt原创 2021-08-03 20:04:07 · 1800 阅读 · 1 评论