c++
文章平均质量分 90
arbboter
也曾梦想上天,还是默默无闻,而今迈步从头越
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
记一次诡异的“同名不同字”Bug:被Windows造字程序和GB18030联手坑惨了
《字符集映射冲突引发的"灵异"Bug排查记》摘要: 一个跨系统对接项目中出现诡异现象:上游Windows C#服务发送的GBK编码用户数据,经过Linux C++网关转UTF-8入库后,肉眼可见相同的字符串却无法通过代码比对。经排查发现根源在于Windows私有字符映射与Linux标准字符集的冲突:上游系统中使用Windows造字程序生成的私有区字符(U+E863),在GBK传输时被映射为FE 9F字节,而Linux端的GB18030标准将该字节解释为正式汉字"䶮"(U+4DAE)。这种跨系统的字符集解释差原创 2026-07-02 10:25:21 · 384 阅读 · 0 评论 -
【C/C++】拨云见日:深入理解函数参数的求值顺序与入栈顺序
C/C++函数参数求值顺序与入栈顺序详解 本文深入解析C/C++函数调用中的两个关键概念:参数求值顺序和入栈顺序。求值顺序指表达式计算的先后,而标准未规定具体顺序,编译器可自由决定;入栈顺序则由调用约定决定,通常是从右向左。 文章通过代码示例展示了求值顺序的不确定性,并解释了为何标准不规定求值顺序(为编译器优化留空间)。同时详细说明了cdecl、stdcall等调用约定如何影响入栈顺序,以及不同架构下的实现差异。 最后给出重要编程建议:避免编写依赖特定求值顺序的代码,因其可能导致未定义行为和移植性问题。原创 2025-08-25 15:39:00 · 1338 阅读 · 0 评论 -
【C++20】新特性探秘:提升现代C++开发效率的利器
C++20四大核心特性解析:提升开发效率与安全性 C++20作为重要里程碑,引入了多项革命性特性。本文重点剖析了四个关键改进: std::span:提供安全连续的序列视图,解决传统指针传递的边界安全问题,支持零拷贝操作原生数组和容器,具备子视图功能。 结构化绑定:简化复合数据访问,支持直接解构pair、tuple和结构体成员,提升代码可读性,特别适用于map遍历等场景。 控制流初始化:允许在if/switch语句中初始化变量,精确控制作用域,避免变量污染,完美结合RAII机制。 模板参数推导(CTAD):自原创 2025-08-18 16:54:40 · 988 阅读 · 0 评论 -
【C++20】现代格式化std::format 深度解析
本文介绍了C++20引入的`std::format`格式化库,重点阐明了其解决传统方案(`printf`类型安全缺陷和`iostream`性能语法问题)的设计理念与核心特性。通过本章可以学习到:1. Python启发的`{}`占位符语法与编译时格式检查机制;2. 高级格式控制(对齐/填充/精度)和自定义类型扩展方法;3. 实战技巧如表格生成与性能优化,掌握比`iostream`快2-5倍、类型安全的现代化文本格式化方案。原创 2025-08-14 15:02:00 · 1647 阅读 · 1 评论 -
【编码规范】ASN.1详解:从概念到C++实现解析
本文详细介绍了ASN.1(抽象语法记法一)的概念、数据类型分类、编码规则家族及其核心编码方式,并通过C++代码实现了对ASN.1字符串的解析与输出。内容涵盖其应用场景如X.509证书和SNMP协议,以及BER、DER、PER等不同编码规则的特点与使用。原创 2025-06-12 10:43:15 · 2947 阅读 · 0 评论 -
【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明
AiCoder是专为Notepad++设计的AI辅助插件,支持嵌入式提问(选中文本分析优化)、对话式提问及自定义提示词模板。需Windows 7+/Notepad++ v7.9以上版本,安装时需下载对应脚本并配置API密钥(推荐无问芯穹平台)。功能包括代码解读、优化、注释及侧边栏对话,通过快捷键或菜单操作。配置需编辑config.json文件,提供常见问题解答如安装失败处理、API错误代码解析,但不支持快捷键修改。需联网使用,无代码自动补全功能,技术支持可通过邮件反馈。原创 2025-04-25 16:06:21 · 2364 阅读 · 5 评论 -
【AI插件开发】Notepad++ AI插件开发实践:支持配置界面
本文介绍了为Notepad++ AI插件开发图形化配置界面的实现过程。通过Windows原生API创建对话框资源,构建包含平台选择、模型管理、接口参数配置的交互界面,采用动态控件初始化、双向数据同步机制实现JSON配置与界面元素的实时映射,支持通过模态对话框编辑字段参数。最终实现无需手动修改JSON文件,通过可视化操作完成SSL设置、授权认证、API端点等配置的增删改查,显著提升插件易用性。原创 2025-04-18 23:09:19 · 1890 阅读 · 0 评论 -
【AI插件开发】Notepad++ AI插件开发实践:实现对话窗口功能
本文介绍了Notepad++插件中AI对话窗口的核心功能实现,包括动态模型切换、异步调用与实时输出。通过子类化输入框实现`Ctrl+Enter`提交与换行控制,利用原子变量`g_bRun`管理后台任务状态,按钮图标随发送/停止状态动态切换。模型输出采用流式回调机制,通过`RunUiTask`确保线程安全,并将UTF-8结果转为本地编码显示。界面实时追加问答内容,禁用编辑区域保障操作一致性。原创 2025-04-17 17:32:10 · 1520 阅读 · 0 评论 -
【AI插件开发】Notepad++ AI插件开发实践:支持多平台多模型
本博客详细介绍了Notepad++插件的扩展设计,重点实现多平台、多模型及认证体系三大核心能力。通过配置文件动态切换平台,采用分层架构抽象出多种认证方式(Basic/Bearer/ApiKey等),通过策略模式统一处理授权头生成,确保安全性与扩展性。模型管理模块支持手动配置与自动发现双模式,预留models_endpoint接口为动态模型同步奠定基础。原创 2025-04-16 20:27:28 · 1521 阅读 · 0 评论 -
【加密算法】SM2密钥生成与转换详解:从原理到代码实现
本篇在此前SM2源码的基础上,实现SM2密钥生成等相关操作。在国密算法体系中,SM2是基于椭圆曲线密码(ECC)的非对称加密算法,广泛应用于数字签名、密钥交换等领域。在前文中,我们实现了SM2的加解密、签名与验签功能,但缺少密钥生成模块。本文将深入探讨SM2密钥的生成原理,并提供完整的C++实现代码,涵盖密钥生成公私钥转换和十六进制编码等核心功能。本文完善了SM2算法的密钥管理模块,通过底层椭圆曲线运算实现了密钥生成、转换和推导功能。这些函数为构建完整的SM2应用(如数字证书、安全通信)奠定了基础。原创 2025-04-15 17:35:01 · 5044 阅读 · 5 评论 -
【加密算法】SM2签名本地验证成功,为啥对方判定非法?——深入解析SM2签名格式兼容性问题
SM2签名验证失败的根源往往在于编码细节的疏忽或参数处理的差异。ASN.1 DER编码规则,特别是补零场景。公钥与用户ID的标准化表示。严格的验签流程检查(如范围、哈希算法)。签名约定,如编码或长度约定通过工具验证和日志调试,可快速定位问题,确保跨系统兼容性。原创 2025-04-14 22:10:03 · 2851 阅读 · 0 评论 -
【加密算法】SM2国密算法原理、C++跨平台实现(含完整代码和示例)
本文围绕SM2算法展开,系统介绍了其技术原理与实现方法。首先,从算法基础入手,概述了SM2的核心数学原理、关键参数及组件构成。接着,深入解析了数字签名、加密解密流程以及密钥交换协议,并探讨了椭圆曲线数学优化技术,展示了SM2在性能与安全性上的优势。安全性分析部分则从算法设计、抗攻击能力及与RSA/AES的对比入手,全面评估了SM2的安全性。最后,通过C++跨平台自实现(Header-Only)展示了源码封装、单元测试及输出结果,为开发者提供了实用参考。本文旨在为SM2算法的理论研究与工程实践提供清晰指导。原创 2025-04-11 16:21:55 · 9265 阅读 · 9 评论 -
【加密算法】SM4国密算法原理、C++跨平台实现(含完整代码和示例)
本文系统阐述了SM4国密算法的技术体系与工程实践。通过分组密码基础理论建立算法框架,明确其128位分组/密钥长度及32轮迭代结构。在原理层面,重点解析轮函数中复合域S盒的非线性变换机制,并对比ECB/CBC工作模式的适用场景。安全性分析从差分攻击概率到侧信道防御方法,论证算法合规性,并通过性能数据揭示与AES的差异。最终以CBC模式源码实现收尾,提供Header-Only库设计与单元测试验证方案,为开发者提供完整技术参考。原创 2025-04-07 17:26:44 · 8260 阅读 · 3 评论 -
【C++】nlohmann::json 配置加载技术实践:从基础到高级应用
本文系统解析了C++中nlohmann::json库的配置加载技术,涵盖其核心特性(header-only、类型安全、STL兼容),对比了优缺点及适用场景(配置管理、API交互)。通过代码示例演示JSON创建、解析、遍历等操作,并提出基于模板函数的通用配置加载方案,支持嵌套结构处理。针对高级用法,详细解释NLOHMANN_DEFINE_TYPE_INTRUSIVE宏的序列化机制及约束条件。最后结合Mermaid和PlantUML实现技术文档可视化,提供流程图、时序图、类图等实现方案,提升配置系统的可维护性。原创 2025-04-03 23:24:31 · 2270 阅读 · 0 评论 -
【AI插件开发】Notepad++ AI插件开发实践(代码篇):从Dock窗口集成到功能菜单实现
上篇文章已经在Notepad++的插件开发中集成了`选中即问AI`的功能,这一篇文章将在此基础上进一步集成,支持`AI对话窗口`以及常见的代码功能菜单: - 显示AI的Dock窗口,可以用自然语言向 AI 提问或要求执行任务 - 选中代码后使用,AI 会详细解释代码功能 - 需要 AI 帮助改进或修复代码时使用 - 自动生成代码注释 - 选中即问,直接把选中内容丢给AI - 参数设置,基于插件配置切换AI平台等参数,提供对话框设置及调整平台参数原创 2025-04-02 20:39:25 · 1172 阅读 · 0 评论 -
【AI插件开发】Notepad++ AI插件开发实践:从Dock窗口集成到功能菜单实现
本文详细阐述了Notepad++ AI插件的开发实践,重点解决了Dock窗口集成与核心功能菜单的实现难题。通过裁剪Notepad++源码,剥离窗口管理核心模块并重构暗色主题依赖,成功构建轻量化的AI交互界面。基于`DockingDlgInterface`设计支持富文本的对话窗口,实现代码解释、智能优化、注释生成等核心功能,并通过动态菜单注册机制绑定快捷键。文章深入解析了窗口单例模式、DPI自适应布局、线程安全通信等关键技术,展示了插件菜单与AI交互窗口的实际效果,为开发智能化代码辅助工具提供了完整的实现路径原创 2025-04-01 12:09:34 · 1547 阅读 · 0 评论 -
【Ai插件开发】Notepad++ AI插件开发进阶(代码篇):集成Ai模型问答功能与流式交互实现
本文系统阐述了Notepad++插件开发与AI集成的关键技术路径。基于Scintilla控件交互优化,通过ScintillaCall接口替代传统SendMessage实现类型安全的编辑器操作,解决了参数转换繁琐与接口文档依赖问题。创新性地构建流式响应处理管道,采用生产者-消费者模式实现AI模型的异步交互,支持Chunk数据解析与打字机动画渲染,有效处理长文本分段与编码转换(GBK/UTF-8自适应)。工程实践包含多线程架构设计、JSON配置管理及WinHttp封装应用,最终实现选中内容智能问答功能。后续将拓原创 2025-03-30 06:00:00 · 1110 阅读 · 0 评论 -
【Ai插件开发】Notepad++ AI插件开发进阶:集成Ai模型问答功能与流式交互实现
本文系统阐述了Notepad++插件开发与AI集成的关键技术路径。基于Scintilla控件交互优化,通过ScintillaCall接口替代传统SendMessage实现类型安全的编辑器操作,解决了参数转换繁琐与接口文档依赖问题。创新性地构建流式响应处理管道,采用生产者-消费者模式实现AI模型的异步交互,支持Chunk数据解析与打字机动画渲染,有效处理长文本分段与编码转换(GBK/UTF-8自适应)。工程实践包含多线程架构设计、JSON配置管理及WinHttp封装应用,最终实现选中内容智能问答功能。原创 2025-03-29 11:27:55 · 1445 阅读 · 0 评论 -
【AI插件开发】Notepad++插件开发实践:从基础交互到ScintillaCall集成
在文本编辑器领域,Notepad++凭借其轻量级特性和强大的插件生态,成为开发者群体中的热门选择。作为基于Scintilla组件构建的编辑器(Scintilla是开源的代码编辑控件,被Notepad++、Geany等知名工具广泛采用),其插件开发体系具有独特的技术特点。本文是AI辅助开发系列的第二篇,前序文章已实现通过WinHttp封装C++访问大模型的SDK。本篇将聚焦于构建Notepad++插件开发框架,重点解决以下技术要点:本文重点讲解插件开发的核心技术路径,重点攻克Scintilla控件交互的工程化原创 2025-03-28 19:41:14 · 2114 阅读 · 0 评论 -
【C++接入大模型】WinHTTP类封装:实现对话式大模型接口访问
本博客详细解析了基于WinHTTP封装的C++ HTTP客户端类SimpleHttp的设计与实现。该类支持同步/异步请求及流式数据处理,核心功能包括:1)通过WinHTTP API实现HTTP/HTTPS通信,自动处理SSL加密;2)采用多线程技术分离数据接收与主线程,通过线程安全队列实现流式响应缓存;3)提供简洁接口封装GET/POST请求,支持自定义请求头与JSON参数;4)异常处理机制覆盖网络错误、HTTP状态码校验及资源释放。特别针对流式场景设计了TryFetchResp轮询接口原创 2025-03-27 18:49:16 · 1733 阅读 · 0 评论 -
【基础库】Windows环境下OpenSSL安装与集成指南:源码编译与安装包方案解析及对比
OpenSSL作为网络安全领域的基石库,其Windows环境下的部署方案直接影响开发效率与程序性能。本文将系统性探讨源码编译与安装包部署两种方案的技术细节,通过参数对比与场景分析,为开发者提供完整的决策框架,并重点解析Visual Studio 2019环境下的集成方法。原创 2025-03-26 11:13:08 · 2032 阅读 · 0 评论 -
ctypes结构体(Structure)通用格式化输出打印等
背景在使用python和c\c++混合编程的时候,我们通常使用python的ctypes方案,这时在编码过程中就免不了要与c的结构体struct打交道。在编码过程,尤其是调试中,我们有时需要便捷地查看或者日志打印结构体信息,如果我们按c的方式一个个结构体成员手工编码输出,这是比较复杂且费力的,因此有必要实现一种通用的结构体格式化输出的功能,便于查阅结构体对象信息。本文就是基于上述需求实现的一...原创 2019-10-26 14:20:48 · 6287 阅读 · 0 评论 -
城市行--求网格中的可达路径数
今天遇到的一个题目,题目描述大概是这样的:有一个城市东西方向有四条平行且间距相同的道路,南北方向有六条平行且间距相同的街道,这几条道路横穿贯通整个城市,现有一个人从城市的最西南角想到城市的最东北角上去,且只往东或者往北方向走,求有多少种方案?当时画了下图,想到了用递归方法,不过因为时间问题没有深想,也想到了用穷举法,不过最后还是没有做出来。题中所述可转化为下图:也就原创 2015-03-07 21:59:43 · 4457 阅读 · 0 评论 -
C\C++小知识汇总
类的大小空类(不含成员变量和虚函数):因为对象不可能不占内存,否则这个对象怎么存在,所以C++规定空类对象内存大小为1。 class EC{public: EC(){} ~EC(){}; void EC1() { printf("EC1\n"); }};class EVC{public: EVC(){} ~EVC(){}; void EVC1() { ...原创 2014-05-13 17:06:28 · 2224 阅读 · 0 评论 -
文章标题
C++调用Python脚本#include <Python.h>class CPyCall{public: CPyCall() { Py_Initialize(); // 检查初始化是否成功 if (!Py_IsInitialized()) { MD_COMM_LOG_ERR(-1, "Py_原创 2016-04-27 10:09:36 · 951 阅读 · 0 评论 -
memmove函数实现
背景memcpy是我们最常用的数据拷贝函数,一般使用不会有啥问题,但是当涉及到目标区域的数据和源数据有数据重叠的时候,可能就会产生我们意想不到的拷贝结果。究其原因,memcpy是通过从头至尾的顺序拷贝方式实现,所以如果拷贝一开始就导致源数据区的数据被破坏(修改),那么拷贝结果就并不是我们预想到的数据数据拷贝了。在什么样的情况下会导致memcpy失效呢?这就得追本溯源了,我们知道memcpy的实现方式原创 2016-09-23 16:51:59 · 2200 阅读 · 2 评论 -
STL之erase
STL 中 erase 的那些坑 STL 中 erase 的坑估计不少人都踩过, 自认为已经免疫了, 结果最近又踩了次坑, 于是怒发此文 大多人肯定都是从最简单的坑踩过来的:some_container a;for(iterator it = a.begin(); it != a.end(); ++it){ if(shouldDelete(it)) {原创 2016-05-05 17:48:23 · 1236 阅读 · 0 评论 -
实用代码段整理
字符串截断 GBK编码的字符串,截取前n字节,且保证截取部分不包含半个汉字。std::string Substr(const std::string&amp; strSrc, const size_t&amp; nLen){ std::string strSub = strSrc.substr(0, nLen); if (strSub.length() &lt...原创 2016-11-28 19:26:48 · 908 阅读 · 0 评论 -
C++11 异步编程示例-future
示例说明示例很简单,大致步骤为:调用异步函数async创建异步对象,返回结果为future类型合适的时候使用异步对象返回的future方法检测异步任务执行进度检测任务执行成功后,使用future的get方法获取异步任务执行结果代码示例:#include <future>#include <iostream>#include <string&...原创 2018-03-22 17:07:08 · 2848 阅读 · 3 评论 -
C++新语法特性
0. 背景最近在学习过程中,不小心就发现一些不认识的C++语法和技巧,一查才发现我的认知已落后许久,随着C++的发展,很多新奇的高级编程语言技巧都已经被C++吸纳,而我的认知还一直在c++98停滞不前,惭愧。本章收集了一些比较常见的场景和技巧,记录学习笔记,持续更新中…auto – C++11auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,类似的关键字还有decl...原创 2018-12-25 15:56:01 · 812 阅读 · 0 评论 -
Visual Studio 2019 + WSL + Linux(Ubuntu)程序配置开发
安装Visual Studio 2019在安装Visual Studio 2019时,需要勾选Linux开发环境选项,即勾选“使用C++的Linux开发”工具集,如下图所示:创建Linux类型项目启动已经安装好的Visual Studio 2019,创建新项目选择,如下图所示:项目新建完成后,IDE已经自动帮我们编写完成一个HelloWorld的程序代码。因为程序需要在Linux上编译...原创 2019-09-25 17:27:07 · 16747 阅读 · 0 评论 -
协程库libco学习使用入门示例
简介libco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。libco通过仅有的几个函数接口 co_create/co_resume/co_yield 再配合 co_poll,可以支持同步或者异步的写法,如线程库一样轻松。同时库里面提供了socket族函数的hook,使得后台逻辑服务几乎不用修改逻辑代码就可以完成异步化改造。libco是一个源码简洁而...原创 2019-09-25 17:32:09 · 7800 阅读 · 8 评论 -
libco源码学习解读
libco源码学习解读简介顺着上一篇文章示例,这里对文章中所涉及的函数及数据类型逐一进行深入分析,以期深入学习理解libco的实现原理,帮助我们加深对协程的理解,并帮助我们更加有效地使用libco协程库并排查问题。创建协程co_create该函数用于创建一个协程对象,其实现源码如下:int co_create(stCoRoutine_t** ppco, const stCoRoutine...原创 2019-09-26 16:16:01 · 1022 阅读 · 0 评论 -
libco协程示例-多协程任务代码(类似多线程)
libco协程示例-多协程任务代码(类似多线程)简介在我们平常的工作及测试过程中,涉及到多个任务并行工作时我们一般会考虑使用多线程方案,多线程的方案方便我们在同一个程序中并行执行多个任务,不仅可以一心多用,而且还可以有效地提升机器的使用效率。考虑到协程是一种更轻量级的多任务并行方案,因此我们在遇到允许使用多线程的时候不妨停下来想想,是不是可以使用协程替代线程,从而达到相同的效果。本文根据l...原创 2019-10-08 14:41:37 · 891 阅读 · 0 评论 -
设置文件大小
HANDLE hFile1 = CreateFileA("F:\\2.log", FILE_GENERIC_READ | FILE_GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL); if(INVALID_HANDLE_VALUE != hFile1) { LARGE_INTEGER liSize = {1024*102原创 2014-08-07 09:23:15 · 2026 阅读 · 0 评论 -
faac源码分析之解码参数配置
FAAC定义了一个结构体用来定义解码器的工作解码参数,该结构体的定义如下所示:typedef struct faacEncConfiguration{ /* config version */ int version; /* library version */ char *name; /* copyright string */ char *co原创 2015-01-31 10:45:08 · 5405 阅读 · 0 评论 -
使用ffmpeg转码pcm至aac格式
准备工作去官网下载源码自己编译所需要的库,或者直接从官网下载已经编写好的库,由于本例是Window平台下的开发,而官网已经有了编译好的库,所以直接下载编译所需要的库文件即可。下载地址:需要下载两个压缩包,Dev版本和Shared版本,其中Dev版本是头文件和lib库文件,Shared是包含运行所需要的dll文件。下载完成后,需要把这些头文件、静态库、动态链接库引入到我们的工程里面,不过在W原创 2015-01-23 17:30:12 · 10813 阅读 · 1 评论 -
【简单动画】OpenGL弹弹碰
#include GLfloat x1 = 100.0f;GLfloat y1 = 150.0f;GLsizei rsize = 50;GLfloat xStep = 2.0f;GLfloat yStep = 2.0f;GLfloat windowWidth = 0.0f;GLfloat windowHeight = 0.0f;GLuint nTimer = 1;//原创 2014-11-11 15:06:21 · 2441 阅读 · 2 评论 -
进程管理器
仿XueTr的进程模块做的一个关于jinc原创 2014-09-13 15:04:17 · 1509 阅读 · 0 评论 -
C\C++控制台颜色设置类
windows和Linux都可用的一个类...用来设置颜色,没有太复杂,简单够用吧。#ifdef _WIN32#include class FontColor{public: FontColor() { m_hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); } void SetColor(int nColor) { SetConso原创 2014-08-27 16:07:17 · 2292 阅读 · 0 评论
分享