自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【ROS】1.ros类中宏定义的作用 class ROSCPP_SERIALIZATION_DECL SerializedMessage

Windows 平台#else#endif在这个示例中,当编译 DLL 时,宏被定义,被设置为,从而导出符号。当使用 DLL 时,宏未定义,被设置为,从而导入符号。POSIX 平台在 POSIX 系统(如 Linux)上,指定符号的可见性,以便在动态库中导出。是一个用于控制符号导出和导入的宏,在不同的平台和编译环境中定义可能有所不同。它确保了在不同的编译条件下,类和函数的符号能够正确地被导出或导入,以便在动态库中使用。这种做法帮助管理跨平台代码的兼容性和模块之间的接口。

2024-08-07 16:03:34 306

原创 std::enable_if定义及使用

是 C++ 标准库中的一个模板工具,用于实现条件编译,通常用于模板编程中的SFINAE(Substitution Failure Is Not An Error)技术。可以帮助你在编译时根据某些条件来启用或禁用模板实例化。

2024-07-26 19:51:16 318

原创 C++客户端服务端如何进行SOCKET编程进行网络通信

在C++中进行客户端和服务端的网络通信,通常使用套接字(Socket)编程来实现。套接字是实现网络通信的一种机制,允许程序通过网络发送和接收数据。

2024-07-18 21:07:33 282

原创 grpc和rpc及使用场景

RPC 和 gRPC 都是用于实现远程过程调用的技术,RPC 是一种通用的概念,而 gRPC 则是一个具体的高性能 RPC 框架,基于 Protocol Buffers 和 HTTP/2 实现。它们的选择取决于具体的应用场景和需求,比如在微服务架构中,特别是需要高效、跨语言通信的场景,gRPC 是一个非常合适的选择。

2024-07-18 20:40:05 437

原创 Protobuf和json有什么区别

protoProtobuf适合于对数据传输效率和解析性能有较高要求的场景,而JSON则更适合于简单的数据交换和易读性要求较高的场景。

2024-07-18 16:20:43 381

原创 什么是IO多路复用/ select、 poll、 epoll使用

IO多路复用(IO multiplexing)是一种通过单一的系统调用来监视多个文件描述符(通常是套接字),以确定是否有数据可读或可写的技术。它允许单个线程处理多个IO操作,提高了程序的并发性能和效率。select程序通过select函数监听标准输入(stdin),如果5秒内有输入则打印消息,否则打印超时消息pollselectepollselectpoll当使用epoll。

2024-07-17 10:53:31 770

原创 C++多态的使用

多态(Polymorphism)是面向对象程序设计中一个重要的概念,它允许同样的操作在不同的对象上有不同的行为。在C++中,多态可以通过虚函数(Virtual Function)和继承来实现。

2024-07-16 21:57:09 569

原创 什么是UDP和TCP,优缺点,使用场景、使用方法

UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)是两种互联网协议,用于在计算机网络上进行数据通信。

2024-07-16 21:37:20 872

原创 工厂模式-通俗易懂

工厂模式(Factory Pattern)是一种创建型设计模式,用于创建对象而不需要暴露对象创建的逻辑。它通过定义一个创建对象的接口,但是让子类决定实例化哪个类来创建对象。这样可以将对象的实例化过程推迟到子类中,从而在主要的代码中减少直接依赖具体类的情况。这种模式特别适用于需要创建多种类型对象,并且这些对象有共同的基类或接口的情况下。

2024-07-14 20:04:59 187

原创 SFTP、FTP主要区别

FTP 基于TCP来传输文件,明文传输用户信息和数据。SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。

2024-07-12 22:10:04 2046

原创 C++ pair数据结构用法

是一种简单而常用的数据结构,用来存储两个相关联的值。它的名称 "pair" 直译为 "对",意味着它可以容纳两个元素,每个元素可以是不同的类型。

2024-07-09 15:12:47 281

原创 简单掌握& 和 &&、 | 和 ||

•2)&&(短路与):当左边的表达式为false时,程序会停止执行右边的表达式,结果仍是false。(当左边为false时,右边不参与运算)•2)||(短路或):当左边的表达式为true时,程序会停止执行右边的表达式,结果仍是true。(当左边为true时,右边不参与运算)•1)&(逻辑与):当左边的表达式为false的时候,程序还是会执行右边的表达式,再得出false结果。•1)|(逻辑或):左边的表达式为true的时候,程序还是会执行右边的表达式,再得出true结果。

2024-07-04 11:03:56 241

原创 ROS2常用命令及基本开发学习内容

//“foreach”循环。它用于遍历容器中的元素遍历容器中的每一个NodeStatus元素,每次循环迭代都将当前元素的值赋给,然后执行循环体中的代码。

2024-07-04 11:02:24 1040

原创 什么是MQTT及常用相关面试题

首先,EMQ使用Erlang语言来开发,这使得它具有良好的并发性和可扩展性,能够处理大规模的消息流量。其次,EMQ提供了可靠的消息传递机制和高级的安全认证功能,以满足物联网应用对消息可靠性和安全性的需求。它包含了MQTT的订阅和发布机制,用于设备之间的消息传递。此外,EMQ还提供了一些高级功能,如集群支持、安全认证机制、消息持久化等,以增强MQTT的可靠性和安全性。EMQ(Erlang MQTT Broker)则是一款基于Erlang语言开发的开源MQTT消息代理,用于实现MQTT协议的消息传递。

2024-07-04 10:53:05 274

原创 一句话概括左值(lvalue)和右值(rvalue)

•具体来说,右值是一个临时的、即将消失的值,通常不能取得其地址。字面值、临时对象、返回非引用的函数调用等都是右值。•具体来说,左值是一个具有持久性的表达式,可以取得其地址。通常,变量、数组元素、返回引用的函数调用等都是左值。•左值是指可以出现在赋值语句的等号左边的表达式,它代表了一个具体的内存位置。•右值是指出现在赋值语句的等号右边的表达式,它代表了一个临时的、无名的值。

2024-07-04 10:51:12 411

原创 什么是字节对齐,简单明了

1.许多计算机体系结构(例如x86、ARM等)要求访问特定数据类型的数据时,数据的地址必须是其大小的倍数。例如,对于4字节大小的整数,在x86架构中,它必须位于内存中4字节的整数倍地址上。如果未对齐,处理器可能需要额外的指令来访问数据,这会降低性能。2.当数据按照正确的对齐方式存储时,处理器可以更快地访问内存,因为它可以通过简单的内存地址计算来定位数据,而无需额外的处理。这对于提高程序的整体性能至关重要,特别是对于大规模的数据处理任务。3.对齐可以带来额外的好处,即节省内存空间。

2024-07-04 10:50:23 153

原创 联合体的特点和作用

联合体(Union)是一种特殊的数据结构,它允许在同一内存位置存储不同类型的数据。与结构体类似,联合体可以包含多个成员,每个成员可以是不同的数据类型,但不同的是,联合体的所有成员共享同一块内存空间。:联合体的不同成员可以在不同的时间点存储数据,但同一时间只能有一个成员处于活动状态。这使得联合体可以用于多种情况,例如存储不同类型的数据,根据需要动态地访问这些数据。:联合体的所有成员共享相同的内存空间。:联合体通常用于处理一些特定的数据结构,例如网络协议中的数据包头部,设备寄存器中的位字段等。

2024-07-04 10:44:52 346

原创 visual studio项目 .sln .vcxproj .vcproj 文件的区别和关系

sln是解决方案的配置,主要是管理这个方案里的多个vcxproj vcxproj是工程的配置文件,管理工程中细节比如包含的文件,引用库等 一般没有sln,也可以直接打开vcxproj,也可以重新生成sln sln里有多个工程,当你移除某个工程时sln会有变化,sln并不是太重要。如果文件只是移动到了对应的解决方案或项目文件夹下,并不能更新到visual studio项目中, 因为配置文件里没有它们, 因此需要专门右键添加现有项配置进去后,才ok。真实文件的目录与解决方案和项目的目录并不一定 一致的。

2024-07-04 10:43:40 327

原创 字符串构造方法,范围构造

这种构造方式的好处在于,它允许直接从输入流(文件、标准输入等)中构建字符串,而无需手动逐字符读取。这样的构造方式更为简洁和高效。这种构造方式的好处在于,它允许直接从输入流(文件、标准输入等)中构建字符串,而无需手动逐字符读取。这个迭代器会从流的当前位置开始,一直读取到文件末尾。:通过这个范围构造函数,将迭代器范围内的字符构造成一个字符串,赋值给。: 这是一个迭代器范围,表示从输入流的当前位置到结束的所有字符。: 这是一个输入流迭代器,它从给定的输入流(在这里是。: 这是一个尾后迭代器,表示输入流的结束。

2024-07-04 10:43:01 111

原创 桥接模式,主机模式,NAT模式

NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。2)如果你有路由器的话,那么就可以使用桥接方式上网,因为此时你申请的IP地址是写在了路由器上,而不是你的机器上,这样包括你的主机,虚拟机,也包括 连在路由器上的其他人的机器,都将可以上网,使用着由路由器分配的IP地址。

2024-07-03 17:10:17 542

原创 配置 systemd 服务

【代码】配置 systemd 服务。

2024-07-03 17:07:30 403

原创 DNS与DHCP

UDP67和UDP68为正常的DHCP服务端口,分别作为DHCP Server和DHCP Client的服务端口;(2)动态分配方式(Dynamic Allocation):DHCP服务器给主机指定一个具有时间限制的IP地址(比如家里无线路由器的IP地址关了重启后IP地址会不一样)。(1)自动分配方式(Automatic Allocation):DHCP服务器为主机指定一个永久的IP地址。(3)手工分配方式(Manual Allocation):客户端的IP地址是由网络管理员指定的。

2024-07-03 17:05:01 165

原创 字符串到整数的转换、%s 打印字符串

是一个字符串,但您尝试将其强制转换为整数(int在C/C++中,字符串到整数的转换通常使用函数如atoistoi或sscanf。如果您使用的是C++,可以使用stoi。

2024-07-03 17:02:56 200

原创 string字符串拼接后转c.str()注意事项

方法时,它返回一个指向以空字符结尾的字符数组的指针,该数组包含以。将结果转换为 C 风格的字符串。的实际内容,而是返回一个 C 风格字符串的指针。类型的对象可以通过多种方式进行操作和修改。运算符将两个字符串连接在一起,然后通过。对象存储的字符串的内容。这样就直接将连接后的字符串赋值给了。方法,但是这个方法返回的是一个。这里直接将整个字符串赋值给了。这是因为在C++中,当使用。以下第一种方式:(×)在拼接字符串时,使用了。以下第二种方式:(√)指针,而不是一个新的。

2024-07-03 16:58:43 130

原创 int转string 转c_str()

在C++中,一个字符串通常是由一个字符数组构成,以 null 终止。当你获得一个字符串的C风格(以 null 结尾的字符数组)表示时,你实际上得到了一个指向数组开头的指针。所有字符的起始位置,直到遇到 null 终止符为止。就会变得无效,因为它仍然指向原始字符串的内存。这个指针指向的内存区域是。

2024-07-03 12:11:52 118

原创 指针变量取成员函数“->“与对象实例“.“

用于通过实例访问对象成员。在某些情况下,可以使用智能指针,如。取决于你正在处理的对象的类型。如果你有一个指针,则使用。当你有一个对象的实例(而不是指针)时,你应该使用。当你有一个指向对象的指针时,你应该使用。是用于通过指针访问对象成员的运算符,而。,如果你有一个对象实例,则使用。来访问对象的成员函数。来访问对象的成员函数。

2024-07-03 12:09:30 167

原创 liunx命令 MINIO服务器基于AWS S3 SDK

【代码】liunx命令 MINIO服务器基于AWS S3 SDK。

2024-07-03 12:07:51 140

原创 双工、半双工、单工通信

半双工通信允许数据在通信设备之间进行双向传输,但不同于双工通信的是,通信设备在同一时间内只能执行发送或接收操作,不能同时进行。双工通信类似于对话式通信,就像人们在电话中进行的对话一样。单工通信只允许数据在通信设备之间单向传输,即通信的一方只能发送数据,而另一方只能接收数据。双工通信允许数据在通信设备之间同时进行双向传输,即设备可以同时发送和接收数据。半双工通信类似于对讲机的操作,其中一方发言时另一方必须等待,不能同时发言。单工通信类似于广播电台,其中信息只能从一个方向传播,接收方不能发送回复。

2024-07-03 11:58:11 279

原创 FTP协议/FTPS协议、SFTP协议/SSH协议

FTP 基于TCP来传输文件,明文传输用户信息和数据。SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。

2024-07-03 11:56:51 1119

原创 const char *初始化与char 、char *、char []

类型的对象(指向字符型字面值常量的指针)来初始化字符型数组。这是因为字符型数组在初始化时可以直接用字符串字面值赋值,而指针将指向这个字符串的第一个字符。表示指向非常量的指针。将常量指针直接赋值给非常量指针可能导致修改常量的值,这是不安全的。进行显式转换,但这样做需要小心,确保你不会试图修改原始字符串的内容。类型,因为它提供了更多的功能和更安全的字符串处理方式。动态分配和释放内存是 C 风格的写法,C++ 推荐使用。类型的对象是指向字符型字面值常量的指针,而字符型数组(表示指向常量的指针,而。

2024-07-03 11:53:26 195

原创 字符串相加strcat 和std::string类

类型,可以通过类的方法轻松执行各种字符串操作,如连接、比较、查找等。C++ 标准库还提供了许多与字符串处理相关的函数。:是以 null 结尾的字符数组。即,它们是字符的数组,最后一个字符是 null 字符('\0'),表示字符串的结束。这种类型的字符串会记录字符串的长度,因此你不需要在字符串末尾添加 null 字符。:通常使用字符数组,需要使用一些标准库函数(如。)或者手动遍历字符数组来进行操作。

2024-07-03 11:46:16 118

原创 map与unordermap

std::map是基于红黑树实现的,它会对键进行排序,因此键值对是有序的。std::unordered_map是基于哈希表实现的,它不保证键值对的顺序,但在许多情况下,查找、插入和删除的性能更好。std::map使用方式和其他有序容器类似,插入的键值对会按键的顺序排列。std::unordered_map 则是通过哈希函数来组织数据,键的顺序并不重要。

2024-07-03 11:43:03 221

原创 将Base64编码的字符串解码为二进制数据

在解码出二进制数据后,你可以将其转换为文本数据。转换的方式取决于二进制数据的编码格式。常见的编码格式包括UTF-8、UTF-16、ASCII等。将Base64编码的字符串解码为二进制数据。然后你可以根据二进制数据的实际内容进行处理,

2024-07-03 11:40:51 324

原创 JSON 对象转换为字符串并通过构建 MQTT消息发送

如果 compressedData 中可能包含 null 字符,你应该使用 compressedSize 来指定正确的长度,而不是依赖于 strlen(jsonString)。这样可以确保 JSON 字符串能够包含二进制数据而不会在 null 字符处截断。compressedData 可能包含二进制数据,其中可能存在 null 字符('\0'),这会导致 strlen(jsonString) 在第一个 null 字符处停止,因此导致字符串长度小于实际压缩数据的大小。// 使用正确的长度。

2024-07-03 11:33:48 193

原创 函数指针和函数调用

具有相同签名(返回类型和参数列表)的函数。这通常用于回调函数的注册,即将一个函数作为参数传递给另一个函数,以便在某个事件发生时调用。// 不是回调函数的用法,而是调用函数并将结果赋给回调函数指针。在回调函数的场景中,我们通常使用第一种形式,将函数的地址(函数指针)赋给回调函数指针,以便在特定事件发生时调用相应的函数。成员的类型兼容,那么这个语法是合法的,但通常不是我们期望的做法。这并不是我们通常期望的回调函数的用法。函数,并将其返回值(如果有)赋给。•这句代码是将函数指针赋值给。是一个函数指针,它指向与。

2024-07-02 14:55:18 115

原创 strcmp 、snprintf与sprintf函数

【代码】strcmp 、snprintf与sprintf函数。

2024-07-02 14:52:09 320

原创 异步通信协议

发送方发送消息后,可以继续执行其他任务,而不需要等待接收方的响应。异步通信协议是指在通信过程中,消息的发送和接收不需要严格的同步,发送方和接收方可以独立执行操作,不需要等待对方的响应。异步通信的关键在于消息的发送方和接收方在执行其他任务时不会被阻塞,可以继续进行其他操作。HTTP/2 是 HTTP 协议的一种更新版本,支持多路复用和二进制帧传输,允许多个请求和响应在同一个连接上并发进行。异步通信协议的优势在于提高系统的响应速度和并发性能,特别适用于需要实时性或大规模连接的场景,如实时通信、物联网等。

2024-07-02 12:10:04 432

原创 lambda表达式

它可以直接作为函数参数传递,或者存储在容器中。

2024-07-02 12:08:57 99

原创 std::call_once函数

是 C++ 标准库中的一个函数,用于确保在多线程环境中只调用一次某个函数。是一个用于标记是否已经调用过一次的标志,每个。对象只能用于一次调用。

2024-07-02 12:08:24 290

原创 同步异步线程(并不是简单的阻塞与非阻塞)

1.•主线程执行一个任务时,会一直等待任务完成,期间主线程被阻塞。•主线程在执行异步任务时不会等待任务完成,可以继续执行其他任务,异步任务在后台执行。2.•主线程和其他线程是并发执行的,但同一时刻只能有一个线程在执行。•主线程和异步线程可以并发执行,不受主线程阻塞的影响,可以更好地利用多核处理器。3.•如果一个任务需要很长时间才能完成,主线程会在等待期间无法响应其他事件。•通过使用异步线程,可以确保主线程在执行异步任务的同时保持响应性,及时处理其他事件。4.•。

2024-07-02 12:06:40 341

初学者学习c++基础框架即相关知识点

C++思维导图,初学者学习

2024-07-01

空空如也

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

TA关注的人

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