自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

哎哟哟也爱技术

不积跬步,无以至千里

  • 博客(129)
  • 资源 (4)
  • 收藏
  • 关注

原创 yas源码解析 之 hexdump打印二进制

hexdump”就是一种用于以十六进制格式显示文件或数据内容的工具或操作。它能够将数据转换为十六进制的数字形式,并以特定的格式展示出来,以便于对数据进行分析和检查。最左侧是地址,中间16进制部分为二进制数据的16进制表示,最右侧为二进制数据ascii码表示。如果,我们想将平时我们工程实践中的二进制数据进行hexdump怎么办?重新造轮子?现在恭喜你,yas已经帮你造好了。

2024-08-21 23:54:21 328

原创 yas源码解析 之 数据压缩的底层原理

纵观yas数据压缩的原理,我认为最大的亮点是:- 假设整数的长度不会超过64位10进制,实际也应该是这个样子的- 使用最小可保存数据的字节数进行数据的压缩- 针对1字节数据的存储,直接将符号、是否为1字节、1字节数据本身都存储在这个1字节数据中整数的压缩存储,就是上面这个样子了,是不是还挺简单。浮点数因为没有进行压缩,所以这里没有提,大家可以直接阅读源码 [yas_comment](https://gitee.com/AriesSun/yas_comment)

2024-08-13 23:44:51 429 1

原创 yas源码解析 之 yas是什么

通过上面的分享,相信你对yas是什么及怎么使用,已经有了大致的了解,如果想了解更多关于源码的分析,可以我注释后的源码(yas_comment: 对yas源码进行注释也可以关注我,等待我后续关于源码的解析文章。

2024-08-13 00:21:42 978

原创 yas源码解析 之 number与字符串互转

对于C++中的std::stoi、std::stol、std::stoll、std::stod、std::stof和std::to_string都不陌生,它们共同完成字符串和数字之间的互转,使用起来非常方便,但是它们的实现大家未必真得有过研究,这不机会来了,yas已经通过非常直白的方式进行了实现,相信比大家直接去看C++源码要轻松的多,而且yas的代码也非常方便移植。

2024-08-06 23:20:24 437

原创 yas源码解析 之 fnv1a

最近在阅读yas的源码,不经意间发现了一个神奇的模版函数fnv1a,开始看了好久,不就是一个普通的递归计算嘛,这有啥用,不查不要紧,这个算法可真是大有来头。通过查阅互联网得知,fnv1a竟然是一个有名的哈希实现方法,是我孤陋寡闻了啊。

2024-07-30 22:33:14 409

原创 Qt实战 10行代码实现无边框窗口的拖动

这里的实现,鼠标拖动窗口的任何区域都可以对窗口进行拖动,如果大家想拖动标题栏时进行移动,可以放置一个QWidget作为标题栏,然后通过ui.header->geometry().contains(event->pos())的方式,决定是否进行窗口的拖动。因此,当我拖动窗口从屏幕2到屏幕1,或从屏幕1到屏幕2时,计算的移动距离delta,就会发生一个跳跃,导致窗口位置错误。如果,屏幕的缩放比例设置为100%,就不会存在上面的问题,可是我们也不能寄希望于用户按照我们的期望去设置啊。

2024-05-22 13:49:43 370 1

原创 纹理图的优化

使用纹理时,不应该一拿到就直接使用,需要对纹理图做一些必要的处理后再使用。这样就能很好的避免资源浪费。出于性能考虑,一般需要注意以下几点。

2024-01-23 20:46:33 462

原创 Godot之StringName解析

StringName内部实现了一个静态哈希表_table,将所有值相同的字符串,在_table中存储唯一一份,并对字符串值实现了引用计数,创建时+1,销毁时-1,为0时,从_table中移除对应节点,并释放字符串占用的内存。

2024-01-08 23:25:58 833

原创 分享一个生成哈希值的C代码

代码是我在阅读assimp源码时看到的,不依赖任何第三方,可直接集成。

2023-11-21 17:07:00 183

原创 assimp中如何判断矩阵是否是单位矩阵

对于一个矩阵元素为浮点型的矩阵,你是否还在使每个元素跟1.0f或0.0f进行比较,如果这样,只能说你的结果不一定正确,那我们看看assimp中是如何做的。这里是定义了一个模板函数,对于矩阵元素为整型和浮点型都是可行的。从而保证了元素值为0.0f或1.0f。

2023-11-10 10:04:41 1042

原创 Qt实战 数据统计柱状图显示

前段时间有朋友找我做个问卷调查的软件,我说现在很多在线文档都有这功能,为啥还要使用Qt撸一个,他说要申请软著,我说,欧了。我们先看看WPS在线问卷的统计中,柱状图统计的效果吧废话不多说,直接上代码了,ui文件就不放了,界面都是通过painter绘制的,没有任何控件。

2023-10-09 22:42:37 517

原创 C++实战 std::ref的使用

可以方便地将外部对象引用传递给函数,使得函数可以直接访问和修改该对象,而不需要进行复制。这对于大型对象或者对象在多个函数之间共享时特别有用。是 C++ 标准库中的一个模板类,用于创建一个对给定对象的引用。它可以用于在函数参数中传递引用,以及在某些情况下避免不必要的复制。否则,当对象被销毁后,引用将变为悬空引用(dangling reference),导致未定义的行为。下面是一个简单的示例,展示了如何使用。的值,而输出的结果也证明了这一点。在上面的示例中,我们使用。的引用,并将其传递给。

2023-08-01 14:36:16 461

原创 C++实战 _aligned_malloc介绍和使用

_aligned_malloc是一个用于在给定的内存块上分配对齐的内存函数。这个函数在 C/C++ 中常常被用来确保分配的内存满足对齐要求,以提高内存访问的效率。

2023-07-19 15:51:39 2103

原创 C++ 那些情况可能导致C++程序崩溃

内存泄漏:如果您的程序没有正确释放动态分配的内存,则可能导致内存泄漏,并且在内存用尽时可能会导致程序崩溃。栈溢出:如果您在程序中递归调用函数,并且每次调用时向栈中添加大量数据,则可能导致栈溢出并且程序崩溃。多线程竞争:如果您的程序中使用多个线程,并且这些线程之间存在竞争条件,则可能导致程序崩溃。不正确的类型转换:如果您在程序中使用了不正确的类型转换,这可能导致程序崩溃。重复删除同一个对象:如果您在程序中多次删除同一个对象,这可能导致程序崩溃。

2023-07-07 10:14:52 1530

原创 Qt实战 无边框窗口的实现

本次分享,是基于Qt实现了无边框的窗口,并支持拖动缩放、最大化、最小化、关闭、双击全屏等。实现无边框其实很简单,一行代码搞定。但是,隐藏了窗口的默认边框,标题栏没了,窗口无法进行了,也没有了,因此都需要自己实现。为了实现无边框窗口到窗口背景的清晰过度,还需要给边框加线或。(本文不提供过度阴影,感兴趣的可以自己去研究,Qt有相关的类可实现)如果将这个无边框的窗口应用到所有窗口,即如何将无边框窗口作为一个容器使用,也是本文需要解决的问题首先给大家展示一下效果图。

2023-06-23 18:07:47 2601

原创 Qt实战 信号槽有哪些连接方式?

相信大多数面试过Qt的同学都会被问的问题,是的,因为在Qt的世界中,这简直太太太基础啦,而你只知道Qt::AutoConnection,从未关心过其他连接方式,如果被我说中了,那就耐心看完吧!

2023-05-24 00:05:35 661

原创 Qt实战 UI只能运行在主线程吗?

对于习惯了Qt开发的同学来说,都习惯了将UI放在主线程,因为自动生成的main函数中,也是窗口在主线程启动的,所以,很容易习惯性地认为UI只能运行在主线程,其实不然。UI其实是可以运行在用户定义的线程中,只要将Qt QApplication的时间循环定义在线程中,并在该线程中启动并执行该事件循环即可。

2023-05-23 23:44:47 614

原创 Qt实战 loading等待窗口实现

【代码】Qt实战 loading等待窗口实现。

2023-05-06 15:38:47 1562 8

原创 基于ZLMediaKit实现同步发送接收数据的TCP Client

本来是个Qt项目,按理说使用QTcpSocket岂不是更好,但是,QTcpSocket在多线程方式下使用时,各种报错或警告,原因是非多线程安全,如果改造成多线程安全,各种信号槽,又不怎么优雅。所以,基于ZLMediaKit写了一个,代码,贴在此处,大家帮忙参谋一下,存在哪些问题?

2023-05-02 12:55:00 295

原创 TinyGltf解析踩坑 之 文件名中包含“+”

模型名称为LIVING+001.cim,解压后得到一堆图片和LIVING+001.skp.gltf、LIVING+001.skp_0.bin文件。以下为LIVING+001.skp.gltf中引用LIVING+001.skp_0.bin的json。跟了下代码,问题出现在了下面这个函数中,说明,tinygltf认为uri是经过encode过的,所以,路径中存在“+”,就被空格给替换掉了。结果在LoadExternalFile时,找不到相应的文件。

2023-04-23 10:49:48 359

原创 C++实战 自旋锁及其实现

非自旋锁和自旋锁是完全不一样的,如果它发现此时获取不到锁,它就把自己的线程切换状态,让线程休眠,然后 CPU 就可以在这段时间去做很多其他的事情,直到之前持有这把锁的线程释放了锁,于是 CPU 再把之前的线程恢复回来,让这个线程再去尝试获取这把锁。在很多场景下,可能我们的同步代码块的内容并不多,所以需要的执行时间也很短,如果我们仅仅为了这点时间就去切换线程状态,那么其实不如让线程不切换状态,而是让它自旋地尝试获取锁,等待其他线程释放锁,有时我只需要稍等一下,就可以避免上下文切换等开销,提高了效率。

2023-04-19 09:39:32 282

原创 C++ 读写锁实现

【代码】C++ 读写锁实现。

2023-03-10 15:27:54 150

原创 C++ 自旋锁实现

来自Godot的源码。

2023-03-10 14:12:33 64

翻译 WIN32_LEAN_AND_MEAN的作用

WIN32 _ LEAN _ AND _ MEAN 符号是在 Windows 95时间框架中引入的,作为在包含 Windows.h 时排除一组 Windows 头文件的一种方法。16位的 Windows.h 头文件没有包含所有这些头文件,定义 WIN32 _ LEAN _ AND _ MEAN 让你回到了16位的 Windows 哲学,即用最少的头文件集来编写一个简单的 Windows 程序。摩尔定律和预编译头合谋使 WIN32 _ LEAN _ AND _ MEAN 符号相对无用。这也救不了你什么了。

2023-02-12 10:23:04 449

原创 Qt Quick和Qt Widgets怎么选型

当我们在开发一个应用时,经常发愁Qt Quick和Qt Widgets该如何选,Qt Quick界面比较优美,而Qt Widgets设计的界面更加原始,实现好看的UI会麻烦一些。起来像本地 Linux、 macOS 和 Windows 应用程序。在移动或嵌入式设备或 MCU 上运行。.我们建议使用Qt Widgets。是大型标准行业类型的应用程序。.我们建议使用Qt Quick。很好地集成到底层平台中。包含动画和图形效果。

2023-01-11 10:54:23 734

原创 为什么用成员初始化列表会快一些

成员初始化列表就是在类或者结构体的构造函数中,在参数列表后以冒号开头,逗号进行。因为使用成员初始化列表进行初始化的话,会直接使用传入参数的拷贝构造函数进行初始。化,省去了一次执行传入参数的默认构造函数的过程,否则会调用一次传入参数的默认构。所以使用成员初始化列表效率会高一些。分隔的一系列初始化字段。

2022-12-21 22:24:01 695

原创 “数字化”与“信息化”的区别是什么?

数字化是信息化基础上的延续,是基于信息化的成果产生的,更强调的是虚拟化,或者称之为“数字孪生”,也就是通过数字化技术对人类社会的仿真,是将物理世界“数字化”。人类五千年的文明史中,一直在通过技术和工具的发明来抵消距离对人类活动造成的影响,而数字化则是以当前技术发展趋势可以展望的最强实现方式。真正的数字化是整个社会的数字化,是一个完整的、互相关联的推进过程,任何一个企业的数字化都并非个体的孤立行为,也无法完全依靠自身进入高度数字化状态,需要整个社会基础设施、法律体系、管理体制的全面进步。

2022-09-18 19:50:34 2272

原创 C++实战 删除字符串的头尾空白符

个人感觉,最核心和最巧妙的地方是,这个算法将“空格、回车、换行、tab”等,存入一个长度为255的string,与空白字符索引相同的值设为1,其他设为0。然后,遍历源字符串s的尾部和首部字符,如果该字符在map字符串中对应的值为‘\1’,那么,就执行pop操作。如果,每次字符比对,还要遍历一次空白字符集,那么,时间复杂度就是O(n*n)了。今天看到一个与平时不一样的算法,因此,第一时间想跟大家分享一下。通过这种实现方式,可以做到O(n)的时间复杂度。...

2022-08-08 09:53:49 1188

原创 C/C++实战 - 获取当前时间的毫秒表示

代码】C/C++实战-获取当前时间的毫秒表示。

2022-07-17 16:19:49 699

原创 C++ 获取当前程序的路径编码实战

在工程实践中,很多同学非常头疼获取当前应用程序的路径,不像Qt有现成的接口可用。这里给大家提供一个经过个人实践证明可用的实战代码,请大家自取使用。

2022-06-21 22:31:39 791

原创 C++ 随机字符串生成实战

工程中,我们经常遇到要生成一个固定长度的随机字符串,比如用作文件名,或者用作加密的key等。下面就把我用到的实战代码放在下面,请大家自取使用。std::mt19937是伪随机数产生器,用于产生高性能的随机数。 C++11引入。返回值为unsigned int。std::mt19937接收一个unsigned int数作为种子。所以可以如下定义:mt是因为这个伪随机数产生器基于Mersenne Twister算法。19937是因为产生随的机数的周期长,可达到2^19937-1。...

2022-06-21 22:03:15 1895

原创 多重纹理与过程纹理开发实战

什么是多重纹理?什么是过程纹理?多重纹理:对同一个图元采用多幅纹理图,这种技术就是多重纹理。过程纹理:在多重纹理的边界根据某种规则进行平滑过渡,这种技术称之为过程纹理。下面我们用一个地球白天,夜晚使用不同的纹理,在某一阶段需要使用过程纹理技术为例进行实战。如果您已经GET了多重纹理和过程纹理的相关知识,别忘记点赞评论。...

2022-06-19 21:09:18 180

原创 C/C++ base64编解码实战

这里提供2种base64编解码的实现方式:代码均是个人实战验证过的,可放心使用。纯C语言实现cpp文件基于OpenSSL的内的编解码组件实现OpenSSL内部封装较好,所以代码比较短。在OpenSSL一统天下的年代,涉及网络安全访问,加解密的业务,没有几个公司是不用的。如果,我的分享给您带来了帮助,别忘了给博主点个赞,大家的支持会促使我为大家分享更多的干货。...............

2022-06-19 09:25:32 615

原创 一文看懂std::weak_ptr的用法

一文看懂std::weak_ptr的用法

2022-06-03 20:30:27 1306

原创 Vulkan之push constant(vkCmdPushConstants)

在pipeline layout中定义了着色器推送常量,他是通过vulkan的command buffer进行更新着色器中的常量,而不是将常量写入memory或复制命令进行更新。在实例化VkPipelineLayoutCreateInfo时,对constant进行描述typedef struct VkPipelineLayoutCreateInfo { VkStructureType sType; const void* pNext; VkPipelineLayoutCreateFla...

2022-05-18 22:46:59 1258

原创 shader转spv小程序

每次将shader转为spv都需要通过命令行执行指令,真是太麻烦了,因此顺手写了一个小程序,使用非常简单,将要转换的着色器文件拖动到小程序上就可以了。源码如下:#include <iostream>#include <list>#include <set>int main(int argc, char** argv){ std::set<std::string> setExtensions = { ".vert", ".frag"

2022-05-17 10:47:53 276

原创 C++中LHS和RHS指什么

对于LHS和RHS,懂得都懂,不懂的一看就懂LHS 赋值操作的左侧 Left Hand Side,一般指左值。RHS 赋值操作的右侧 Right Hand Side,一般指右值。

2022-04-14 21:41:41 3308 1

原创 C++代码中R“(xxxxxxxxxxx)“

在 C++11 中添加了定义原始字符串的字面量,定义方式为:R “xxx (raw string) xxx”, ()两边的字符串在解析的时候是会被忽略的,因此一般不用指定。如果在()前后指定了字符串,那么前后的字符串必须相同,否则会出现语法错误。 string str1 = R"(C:\test.text)"; cout << str1 << endl; string str2 = R"hello(C:\test.text)hello"; cout &

2022-04-14 00:13:53 6994

原创 std::unordered_map主键为结构体

在C++中,当我们将某个数据或对象保存为二进制进行存储或发送时,经常使用std::vector<char>,与new char[LEN],使用std::vector<char>相比有什么好处呢?std::vector<char>作为一个容易,对字符数组进行了封装,提供了丰富的接口,不需要手动进行内存的释放,std::vector<char>的对象出了作用域,会进行自动释放内存。今天讲一讲,使用std::vector<char>的对象进行二进

2022-04-12 23:48:19 1459 2

原创 std::ifstream按行读取文本文件

按行读取并打印 std::string file_path = "xxxxx.txt"; std::ifstream infile(file_path); std::string line; while (std::getline(infile, line)) { std::cout << line << std::endl; }

2022-04-12 21:40:27 2620

Loading等待窗口png资源文件

Loading等待窗口png资源文件

2023-05-06

shader转spv,将着色器文件转为spv文件

将待转换的着色器文件一个或多个,拖到小程序上就会自动转换,spv直接生成到着色器所在目录。

2022-05-17

Git使用详解

对于使用Git的同学来说,记住这些命令,对于平时的开发、提交、合并、更新同步代码工作足够了,秒杀小白级别菜鸟

2019-09-22

dos命令整理总结.md

整理了常用的几乎所有Windows命令(dos命令,cmd)的文档,方便进行基于Windows操作系统的批处理脚本

2019-09-15

XComboBox.rar

基于QComboBox实现自定义的复选框的XComboBox,经过了反复测试验证,并得到了广泛的工程应用,可放心使用。

2019-08-28

空空如也

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

TA关注的人

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