- 博客(133)
- 收藏
- 关注
原创 为什么word中空格键变成点
因为你把【段落标记】显示出来了,所以一个空格就是一个点。你点击【工具】——【选项】——【视图】——【格式标记】——【全部】,把【全部】前面的勾取消。在“选项”界面,找到“格式标记”一栏,在“全部”前面点击去掉勾,再点击“确定”即可。点击“工具”,在下拉列表选择“选项”;
2025-05-20 14:54:34
253
原创 仿射密码的加密与解密
为了能对密文进行解密,必须保证所选用的仿射函数是一个单射函数,则对于任意的y∈Z26,同余方程ax+b≡y(mod 26)有唯一解x,并且等价于ax≡y-b(mod 26)。代换密码的另一个特殊情形是仿射密码,它的加密函数定义为 e(x)=(ax+b)mod 26,其中a,b∈Z26 —— 因为这样的函数被称为仿射函数,所以这的密码体制也被称为仿射密码(当a=1时,正好是移位密码)。解密函数:D(x) = (a'x - b) (mod m),其中 a'是 a 在群的乘法逆元。# 遍历得到a的乘法逆元。
2025-05-13 14:04:54
297
原创 Visual C++ 2017从入门到精通 - 01 窗口
a 调用 CWnd::GetDesktopWindow 和 CWnd::GetWindow 函数:首先调用 CWnd::GetDesktopWindow 函数,获得桌面窗口,然后调用 CWnd::GetWindow 函数,枚举所有子窗口。设置窗口的透明区域,首先调用 CRgn::CreateRectRgn 创建一个区域,然后调用 CRgn::CombineRgn 函数将需要透明的区域去掉,最后调用 CWnd::SetWindowRgn 函数将其设置为窗口区域。窗口分为3种:重叠窗口、弹出窗口和子窗口。
2025-05-06 08:34:31
933
原创 VC++连接错误LNK2001 - [VC++]
3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时, 编译都已通过。1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行 库和MFC库在连接时由编译器写入目标文件模块, 但除非在文件中明确包含 这些库名,否则这些库不会被链接进工程文件。
2025-05-06 08:22:59
527
原创 面试:结构体默认是对齐的嘛?如何禁止对齐?
将对齐设置为1字节,这意味着所有的成员变量都将按照1字节对齐,不会有任何填充字节。的变量存放的地址需要按有效对齐字节剩下的字节数可以被该数据类型所占字节数整除,char可以放在任意位置,int存放在剩下字节数可以被4整除的位置。时,可以恢复到之前的对齐设置。这在你只想临时改变对齐设置的情况下非常有用,因为它允许你在代码的不同部分使用不同的对齐策略,而不会影响全局的对齐设置。不仅将当前的对齐设置为1字节,还将之前的对齐设置压入一个内部堆栈。当没有明确指明时,以结构体中最长的成员的长度来对齐,
2025-04-27 20:32:23
376
原创 面试:什么叫Linux多路复用 ?
Linux多路复用是指一种能够同时监听多个IO事件的机制,使得一个进程能够同时处理多个输入和输出操作。使用多路复用可以避免使用多线程或多进程的方式来处理并发IO操作,提高程序的效率和性能。上述代码使用了epoll实现多路复用,监听标准输入(STDIN_FILENO),当有输入时,打印收到的输入内容。它们都是通过一个系统调用来实现的。注意:以上示例代码是使用C语言编写的,需在Linux环境中编译运行。// 处理待处理的事件。// 创建一个epoll实例。// 设置监听的文件描述符。// 关闭epoll实例。
2025-04-27 15:01:37
329
原创 VScode中文注释乱码的亲测的解决方案
在上方搜索框中搜索 gbktoutf8 ,点击插件,然后点击安装(install)。或者搜索 GBK to UTF8 for vscode,两款插件任选其中一种即可。3. 安装完成后,重新打开代码文件,中文注释正常显示。
2025-04-26 15:43:00
291
原创 VC++ combo box控件的使用
/消除ID为IDC_COMBO_CF现有所有内容。所以获得焦点要用GetParent():if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))例如:((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel() 返回的是当前选中值的行数,是整型。((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n) //设置第n行内容为显示的内容。
2025-04-14 12:49:28
591
原创 Windows开发进阶之VC++中如何实现对话框的界面重绘
应用程序界面是用户与应用程序之间的交互的桥梁和媒介,用户界面是应用程序中最重要的组成部分,也是最为直观的视觉体现。对用户而言,界面就是应用程序,界面设计的好坏,会直接影响应用程序的可用性,从而影响用户的体验。在软件开发过程中,对界面的设计椅子都是一项很重要的技术,如今的应用软件界面可谓是“丰富多彩、美丽绝伦”,如大家熟悉的360安全卫士、腾讯QQ聊天软件、Visual C++ 编程词典软件等,都是非常不同于普通的对话框应用程序,因为他们的界面都是重新绘制过的,从而实现了漂亮、易用的用户体验。
2025-04-14 08:32:28
638
原创 Rust如何引入源码作为依赖
这个动态库可能依赖于其它动态库(比如,Linux 下用 C 语言写的 PostgreSQL 的 libpq.so,或者另一个编译成 "dylib" 的 Rust 动态库)。编译器会把所有实现的 Rust 库代码以及依赖的库代码全部编译到一个静态库文件中,也就是对外界不产生任何依赖了。当我们引用三方包的源码后,编译时Cargo也会根据三方包的Cargo配置编译这些三方包的源码,然后把编译的结果输出到本项目的target/[debug/release]/deps目录下,这样本项目就可以使用这些三方包了。
2025-03-31 08:21:25
1114
原创 Rust 有问有答之 use 关键字
主函数 main.rs 想要调用 print_function,需要对 mod 标识访问级别,使用关键字 pub。use 是 Rust 编程语言的关键字。using 是 编程语言 C# 的关键字。为方法 other_funtion 创建别名 ab_funtion。为命名空间创建别名,或导入在其他命名空间中定义的类型。关键字是预定义的保留标识符,对编译器有特殊意义。定义一个范围,在此范围的末尾将释放对象。使用关键字 use 为作用域创建别名。外部模块 a.rs,代码内容如下。手动加上作用域的方式声明。
2025-03-31 07:48:17
584
原创 python使用opencv进行人脸识别
这个库虽然是最大的,但并不意味着这个库是最好的,应该说,用这个库,识别是最严格的, 这就意味着,有些头像不能被识别,因为根据他的算法,他认为这不是头像。-rw-r--r-- 1 root root 401K 4月 28 2011 haarcascade_mcs_eyepair_small.xml。上面的代码只是识别面部,并不包括头发,如果大家想抓一个完整的头像的话, 可以将识别出来的矩形框的上边缘增加一定的比例,比如增加20%头像的高度。
2025-03-28 13:09:08
1041
原创 Opencv 图像读取与保存问题
由此可见,眼下 Opencv能够直接读取4通道图像并保留Alpha通道的貌似仅仅有PNG格式,对于非PNG格式数据,须要保留Alpha通道的应用,假设坚持使用 Opencv库,建议转格式吧~对于多通道图像,假设想对其每一个通道单独进行保存,当然也是可行的。一方面自己能够依据图像的信息和图层信息写出相应的存储函数,还有一方面 Opencv也提供了专门的函数。值得强调的是,imwrite函数支持存储的图像类型是有限的仅仅包含:1。3,4通道的图像,可是对于不同的图像格式。上述的标识符含义,显而易见,就不累述。
2025-03-28 09:17:44
1304
原创 Qt——设计颜色编辑选取对话框
Qt中已经有一些封装好的对话框,比如QMessageBox、QColorDialog等,使用起来快捷方便,但缺点是我们无法为它们自定义样式,所以可能难以“融入”我们的项目。既然如此,那就自己做一个把。抱着这样的想法,我设计了一个颜色编辑选取对话框。设计界面时,我参考了photoshop的拾色器、windows的画图软件以及一个手绘控件软件mockup。
2025-03-17 09:37:55
815
原创 Qt 串口类QSerialPort 使用笔记
虽然现在大多数的家用PC机上已经不提供RS232接口了。但是由于RS232串口操作简单、通讯可靠,在工业领域中仍然有大量的应用。Qt以前的版本中,没有提供官方的对RS232串口的支持,编写串口程序很不方便。现在好了,在 Qt5.1 中提供了QtSerialPort模块,方便编程人员快速的开发应用串口的应用程序。本文就简单的讲讲QtSerialPort模块的使用。当前的QtSerialPort模块中提供了两个C++类,分别是QSerialPort 和QSerialPortInfo。
2025-03-10 08:27:19
613
原创 Qt/C++音视频开发 - 逐帧播放/上一帧下一帧/切换播放进度/实时解码
逐帧播放是近期增加的功能,之前也一直思考过这个功能该如何实现,对于mdk/qtav等内核组件,可以直接用该组件提供的接口实现即可,而对于ffmpeg,需要自己处理,如果有缓存的数据的话,可以通过在缓存中的数据往前移动往后移动即可。这样就要求做一个比较大的缓存队列,占用一定的内存是肯定的。
2025-03-04 10:09:13
935
原创 Qt/C++音视频开发-检查是否含有B帧/转码推流/拉流显示/监控拉流推流/海康大华宇视监控
为什么需要判断视频文件是否含有B帧,这个在推流的时候很容易遇到这个问题,一般来说,没有B帧的视频文件,解码后的数据帧pts和dts都是顺序递增的,而有B帧的则未必,可能有些需要先解码后面显示,B帧也是双向预测图像B,对它的编码,即是对它前后帧的像素值之差进行编码,B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。
2025-03-04 08:07:59
617
原创 C/C++面试的五大必问问题!
假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数(动态绑定)。在C++中,虚函数的作用是实现多态性。(4)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;(3) 指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了,从一而终。
2025-02-26 08:25:40
610
原创 为什么malloc函数需要传入申请的内存大小,而free时候却不需要传大小呢?
例如,假设 malloc 返回的地址是 ptr,堆管理器可能在 ptr 之前的地址存储元信息(如内存块大小)。调用时,free 只需要传入 malloc 返回的指针地址即可,不需要额外传入内存块的大小。其中,malloc 需要传入申请的内存大小,而 free 却不需要,这背后的原因涉及动态内存分配的实现原理和设计哲学。malloc 的功能是从堆中分配一块指定大小的内存,返回该内存块的起始地址。free 不需要大小,因为堆管理器在分配内存时已经记录了每个块的大小,释放时可以通过内部元信息找到相应的数据。
2025-02-14 07:24:11
534
原创 面试必考:深入理解 Qt 信号与槽机制:原理、用法与优势
不同之处在于,槽函数能够与信号建立连接,一旦与之关联的信号被发射,槽函数便会自动被调用,执行相应的操作。通过QObject::connect()函数,我们能够指定信号的发送者、信号本身、接收者以及对应的槽函数,从而构建起信号与槽之间的通信桥梁,使得信号发射时能够准确触发相应的槽函数。信号与槽的映射表:这是一个数据结构,它记录了类中每个信号和槽的名称、参数列表以及对应的函数指针(在运行时用于调用信号和槽函数)。调用槽函数:一旦找到对应的映射记录,Qt 会根据记录中的信息,调用所有连接到该信号的槽函数。
2025-02-13 20:55:21
592
原创 面试必考:new和malloc的区别
/执行完该语句后,p变成了不确定的指针,在很多机器上,尽管p值没有明确定义,但仍然存放了它之前所指对象的地址,然后p所指向的内存已经被释放了,所以p不再有效。(5)Malloc不能赋初值,new可以,如int *p = new int(2).代表分配一个int型的内存空间,并赋初值2.如果new int ()代表赋初值0,new int[10]代表分配10个int.(2)Malloc和free在C程序中使用,而C++程序中使用new和delete,删除数组delete[]p,指针释放后,要将指针置空。
2025-02-13 17:16:32
1011
原创 面试必考:static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?static局部变量的生命周期?
static修饰的局部变量主要影响全局变量的跨文件访问,即主要影响其作用域,其作用域从整个工程变为本源文件,只在本源文件内才可以被访问,其他源文件需要跨文件调用它只能通过它所在源文件的函数间接访问,这也是保护数据的一种方式,但其生命周期不变,依然为从程序开始到程序结束。static修饰的局部变量具有“记忆”功能,其只会被初始化一次,其生命周期较普通局部变量变长了,从局部变为全局,即从程序开始到程序结束,但其作用域和普通局部变量一样,依然只能作用域函数内或者所在代码块内。2.static修饰全局变量总结。
2025-02-13 16:55:13
454
原创 面试必考:一文搞懂野指针、悬空指针、空指针和内存泄漏,附代码示例!
内存泄漏:指程序在动态分配内存(例如使用malloc、calloc等函数)后,没有释放这些内存,导致这些内存块在程序运行过程中一直被占用,无法被操作系统重新利用。这样,每次调用该函数,就会有一块内存被占用而无法回收,造成内存泄漏。悬空指针:指针原来指向的内存已经被释放(例如通过free函数),但指针本身没有被置为NULL,仍然保存着之前内存的地址。总结,野指针和悬空指针指向无效内存(通常可以统一称为野指针),空指针则明确不指向任何内存,而内存泄漏则是未释放的有效内存,三者均可能导致程序错误和性能问题。
2025-02-13 16:10:12
586
原创 Android Studio使用OpenCV的配置方法
其中,sdk目录即是我们开发opencv所需要的类库;在Android Studio中的左上角选择Project视图,在oepnCVLibrary2411文件夹里,打开build.gradle(有很多重名的文件,一定找对openCV库文件下的),修改文件中的1)compileSdkVersion 2)buildToolsVersion 3) minSdkVersion 4)targetSdkVersion,将其内容与app文件夹下的build.gradle中信息相一致。自此,OpenCV的环境就配置好了。
2025-02-12 16:36:47
485
原创 OpenCV——RGB三通道分离
matlab 的排列顺序是R,G,B;而在opencv中,排列顺序是B,G,R。opencv 和 matlab 在处理彩色图像的时候,通道的存储顺序是不同的。下面通过一个小程序看看opencv中的三个通道。// 三个通道的顺序是 b,g,r.
2025-02-12 16:28:57
895
原创 Vue3 —— 安装及配置环境
安装Node.js通常也会安装NPM,因为NPM是Node.js的官方包管理工具。需要在node运行环境下调试,安装LTS版(长期支持、稳定版)。
2025-02-07 16:37:11
564
原创 Vue3.5常用特性整理
/ watch(foo, /* ... */) 等价于 watch(props.foo, ...),我们给 watch 传递的是一个值而不是响应式数据源。现在有了清理函数 onWatcherCleanup / onEffectCleanup 后,我们可以直接调用它来清理之前的 调用(异步)函数/请求。// `foo` 由编译器转换为 `props.foo`,以上等同于 `console.log(props.foo)`state.a.b.c = 2 // 更改了第三层的属性,不触发监听。
2025-02-07 16:36:02
837
原创 Rust到底值不值得学--Rust对比、特色和理念
其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了。当然这只是一个玩笑,可别把这个问题当真。然而对于IT从业者来说,这可不是一个玩笑。几乎每一次的技术发展,都让这个生态变得更为复杂。“英年早秃”已经成为一种很普遍的现象。Rust是近两年呼声比较高的一种新型开发语言。市场占有量并不大,但增长速度极为迅猛。有人统计过,在计算机行业,平均每33.5天就有一种所谓的新型开发语言面世,这还不包括很多企业内部、项目内部的内置简易流程工具。
2024-12-09 08:17:31
1041
原创 Win 7/10永久修改命令提示符cmd的默认当前页码页为936(简体中,永久解决cmd窗口中文乱码!
进入cmd后,输入"regedit"打开注册表。找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor。然后“右键-新建”,选择“字符串值”,“名称”列填写“autorun”, 数值数据填写“chcp 936”(注意:中间有一个空格哦!当我们进入cmd窗口后,直接输入“chcp 936”回车后,只会临时修改当前的页码页,当再次进入后又会显示之前的页码页。那就是直接修改其注册表。这样我们就自动把编码格式设置为简体中文GBK了。
2024-12-08 23:34:18
807
原创 Windows7下安装Visual Studio2019发生错误的解决办法
起初笔者以为是真的是由于网络不稳定或者是笔者在虚拟机中进行实验安装原因导致的问题,后来由于持续的报网络问题无法下载安装,后来只能寄希望于离线安装包了,痛下决心下了将近40个G离线安装包,依旧破了一盆冷水,没能安装成功……的时候,却发生了莫名闹心的事情:(整个过程记录如下,假如你也遇到了同样的困难,希望对您能有所帮助),全程很顺利的完成了Visual Studio2019的安装,没有遇到任何困难。安装两个必要的补丁后,重新运行即可成功进行联网下载安装。,以便更好的开展工作,自己于是在自己的笔记本电脑(
2024-08-12 17:20:50
1604
原创 Qt十多年的开发经验,无私奉献!
增加了很多轮子,同时原有模块拆分的也更细致,估计为了方便拓展个管理。把一些过度封装的东西移除了(比如同样的功能有多个函数),保证了只有一个函数执行该功能。把一些Qt5中兼容Qt4的方法废弃了,必须用Qt5中对应的新的函数。跟随时代脚步,增加了不少新特性以满足日益增长的客户需求。对某些模块和类型及处理进行了革命性的重写,运行效率提高不少。有参数类型的变化,比如 long * 到 qintptr * 等,更加适应后续的拓展以及同时对32 64位不同系统的兼容。
2024-08-11 23:13:06
815
原创 我们访问github,会出现无法访问此网站的情况
打开windows电脑的hosts文件,位置大概在C:\Windows\System32\drivers\etc,每个人根据情况可能不一样。可能会被杀毒软件拦截,提示可能会有域名劫持的风险。如果一直提示,也可以关掉杀毒软件,用完github之后再开启。我们访问github,会出现无法访问此网站的情况,能访问全靠运气和心情,经常出现这样的情况。结果是这样的,记住140.82.112.3这个ip,下面会有用到。抓狂至极,特别是项目特别着急的时候,更是不知所措。点击保存,即可解决访问超时的问题,访问速度杠杠的。
2024-08-09 19:49:52
518
原创 深入剖析C++多态的实现与原理-详解 (辛苦三万字,且看且珍惜!)
在虚函数后面写上=0,这个函数就为纯虚函数.纯虚函数只能写声明,不能写函数体.
2024-06-30 08:52:30
1037
原创 安全测试前置实践1-白盒&黑盒扫描
本文我们讲述了体验保障的安全质量提升过程。重点讲述黑盒、白盒的扫描过程。首先对漏洞工单进行了分析,确定了漏洞的来源、种类、分布,摸清了漏洞的现阶段情况。然后通过进行安全前置扫描,对工单中的白盒、黑盒问题前置识别。过程中通过开发工具来提升效率,最终形成一套可行的前置开展方案。但需注意:除了解决存量漏洞问题,还需要新增类问题,需要持续不断地建设,需要实现安全测试的常态化运行。并且要利用更多自动化工具,去进行提效。
2024-06-21 09:29:13
1204
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人