
C++
文章平均质量分 61
MY CUP OF TEA
所谓的念念不忘,在自己眼中是爱,在对方眼中是烦,在旁人眼中是贱。
展开
-
VS2022 添加 dll 库文件
这些方法可以避免将 DLL 文件复制到可执行文件所在的目录下,但也可能带来一些其他的问题,比如 DLL Hell,因此需要根据具体的情况进行选择。添加包含目录:在“包含目录”中添加库文件的路径,包括 .h 文件所在的目录。在 Visual Studio 2022 中,可以通过在项目属性页面中添加库文件的目录,让编译器知道需要链接的库文件的位置。添加库目录:在“库目录”中添加库文件的路径,包括 .lib 文件所在的目录和 .dll 文件所在的目录。选择“链接器”选项卡:在“属性页”中选择“链接器”选项卡。转载 2023-03-30 14:43:05 · 26968 阅读 · 0 评论 -
Engine实现国密算法SM4 ECB/CBC 模式的代码和逻辑图
Engine实现国密算法SM4 ECB/CBC 模式的代码和逻辑图原创 2023-02-15 19:13:11 · 969 阅读 · 3 评论 -
构建用于签名/加密双证书测试体系的可执行命令
构建用于签名/加密双证书测试体系的可执行命令原创 2022-11-28 18:05:53 · 4021 阅读 · 3 评论 -
对dladdr未定义的引用
对dladdr未定义的引用原创 2022-11-25 16:01:42 · 625 阅读 · 1 评论 -
往USBKey里面导入双证书专题:概念介绍、执行逻辑
往USBKey里面导入双证书专题:概念介绍、执行逻辑原创 2022-11-24 17:03:05 · 2793 阅读 · 2 评论 -
解决吉大正源(身份认证网关|USBKey)和gmssl(server|client)使用gmtl协议交叉互通报错tlsv1 alert decrypt error
解决吉大正源(身份认证网关|USBKey)和gmssl(server|client)使用gmtl协议交叉互通报错SSL_connect:error in SSLv3/TLS write finished140057291788288:error:1409441B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:ssl/record/rec_layer_s3.c:1385:SSL alert number 51原创 2022-11-23 14:46:22 · 2194 阅读 · 0 评论 -
函数指针作为形参进行调用
函数指针作为形参进行调用原创 2022-11-09 10:11:28 · 543 阅读 · 0 评论 -
结构体中二级指针的赋值和释放
#include <iostream>#define RTA_DATA(rta) ((crypto_attr_type*)(((char*)(rta)) + 20))struct test{ int first; int second;};int test_ptr(struct test** ptr){ struct test* new_node = nullptr; new_node = (struct test*)malloc(sizeof .原创 2021-12-28 19:50:01 · 605 阅读 · 0 评论 -
手机安卓学习 内核开发
官网开源代码Documentation - MiCode/Xiaomi_Kernel_OpenSource - Sourcegraph Xiaomi 11T Pro GitHub - MiCode/Xiaomi_Kernel_OpenSource: Xiaomi Mobile Phone Kernel OpenSource Android 开源项目 | Android Open Source Project google安卓官网目录概览参考链接小米平板3安卓...原创 2021-12-25 11:35:20 · 1400 阅读 · 0 评论 -
C语言深度剖析书籍学习记录 第七章 文件结构
原创 2021-12-24 11:14:53 · 423 阅读 · 0 评论 -
C语言深度剖析书籍学习记录 第六章 函数
函数的好处1、降低复杂性:使用函数的最首要原因是为了降低程序的复杂性,可以使用函数来隐含信息,从而使你不必再考虑这些信息。 2、避免重复代码段:如果在两个不同函数中的代码很相似,这往往意味着分解工作有误。这时,应该把两个函数中重复的代码都取出来,把公共代码放入一个新的通用函数中, 然后再让这两个函数调用新的通用函数。通过使公共代码只出现一次,可以节约许多空间。 因为只要在一个地方改动代码就可以了。这时代码也更可靠了。 3、限制改动带来的影响:由于在独立区域进行改动,因此,由此带来的影响也只限于一个.原创 2021-12-24 10:58:11 · 359 阅读 · 0 评论 -
C语言深度剖析书籍学习记录 第五章 内存管理
常见的内存错误 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。 结构体成员指针未初始化很多初学者犯了这个错误还不知道是怎么回事。这里定义了结构体变量 stu,但是他没 想到这个结构体内部 char *name 这成员在定义结构体变量 stu 时,只是给 name 这个指针变 量本身分配了 4 个字节。name 指针并没有指向一个合法的地址,这时候其内部存的只是一 些乱码。所以在调用 strcpy 函数时,会将字串"Jimy"往乱码所指的内存上拷贝,而这块内存...原创 2021-12-24 09:35:32 · 962 阅读 · 0 评论 -
C语言深度剖析书籍学习记录 第四章 指针和数组
p 称为指针变量,p 里存储的内存地址处的内存称为 p 所指向的内存。 指针变量 p 里存储的任何数据都将被当作地址来处理 一个基本的数据类型(包括结构体等自定义类型)加上“*” 号就构成了一个指针类型的模子。这个模子的大小是一定的,与“*”号前面的数据类型无 关。 “*”号前面的数据类型只是说明指针所指向的内存里存储的数据类型。所以,在 32 位 系统下,不管什么样的指针类型,其大小都为 4byte。可以测试一下 sizeof(void *)。 int *p = NULL; 这时候通过编译器...原创 2021-12-23 22:27:25 · 1051 阅读 · 0 评论 -
C语言深度剖析书籍学习记录 第三章 预处理
宏_LINE_ 表示正在编译的文件的行号 _FILE_ 表示正在编译的文件的名字 _DATE_ 表示编译时刻的日期字符串,例如: "25 Dec 2007" _TIME_ 表示编译时刻的时间字符串,例如: "12:30:55" _STDC_ 判断该文件是不是定义成标准 C 程序 宏名的书写由标识符与两边各二条下划线构成 #define PI 3.141592654 const 修饰的不是常量而是 readonly 的变量,const 修饰的只读变量不能用来作为定义数组的维数, 也不能...原创 2021-12-23 19:37:31 · 583 阅读 · 0 评论 -
Socket通信 客户端加密数据,传递数据密文到服务端,服务端解密密文 输出明文
server// sdf_cpp_warpper.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。// server端#ifndef UNICODE#define UNICODE#endif#define WIN32_LEAN_AND_MEAN#include <iostream>#include <string>#include <sstream>#include <vector>#include &原创 2021-12-23 15:04:54 · 2477 阅读 · 3 评论 -
C语言深度剖析书籍学习记录 第二章 符号
\ 连接符号,// \ 可以把下一行也注释调 编译器 删除注释时,会使用空格进行替代原创 2021-12-22 13:25:39 · 250 阅读 · 0 评论 -
C语言深度剖析书籍学习记录 第一章 关键字
C语言标准定义了32个关键字union声明联合数据类型Union declaration - cppreference.com 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在 union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址union StateMachine{ char character; int number; char *str; double e原创 2021-12-22 12:40:39 · 710 阅读 · 0 评论 -
使用wireshark抓包,本地环回测试通信数据已经通过SM4国密算法加密
具体操作本实验采用 本地环回测试 开启wireshark抓包工具,设定端口号 tcp.port == 5099 (5099为服务端对外开启服务的端口号),不可以使用ip.addr指定ip地址,因为本地环回测试,相关信息太多,使用端口抓包最为简单 首先开启服务端,然后开启客户端,服务端开启之后输出 "Bind returned success",并输出客户端连接通信使用的端口号,然后客户端会使用socket通信传输经过SM4对称加密算法加密返回的密文 密文存储格式是字符串,表示形式是十六进制;soc原创 2021-12-21 10:09:56 · 2456 阅读 · 0 评论 -
C++/C++11中std::runtime_error的使用
参考链接C++/C++11中std::runtime_error的使用_网络资源是无限的-优快云博客_runtimeerror转载 2021-12-20 17:53:28 · 845 阅读 · 0 评论 -
C++ puts函数 打印字符串很方便
参考链接c++ puts函数_在C / C ++中使用puts()函数_从零开始的教程世界-优快云博客转载 2021-12-20 17:16:29 · 550 阅读 · 0 评论 -
SM4 ECB加密模式 数据对比试验论证
程序如下开启服务器密码机,调用SM4加密函数,需要注意的是 程序输入的数据全部使用Hex 十六进制的格式 Key IV Data IV 00000000000000000000000000000000 Source(加密数据) char input_date[] = {'a','a','a','a',.......} Ascll编码 需要转16进制 input_data303030303030303030303030303030CC CC表示此位无数据 注意事项:考虑到程序...原创 2021-12-20 14:01:22 · 1985 阅读 · 0 评论 -
数据填充规则之PKCS7
程序输入的数据全部使用Hex 十六进制的格式 IV 00000000000000000000000000000000 Source(加密数据) char input_date[] = {'a','a','a','a',.......} Ascll编码 需要转16进制 input_data303030303030303030303030303030CC CC表示此位无数据 注意事项:考虑到程序采用 PKCS#7填充,填充方式为当数据长度不足数据块长度时,缺少几个元素,就使用几个几的十...原创 2021-12-20 13:56:22 · 1087 阅读 · 0 评论 -
C++ Byte转十六进制字符串输出
代码例子一typedef std::vector<unsigned char> bytes;std::string BytesToStr(const bytes& in){ bytes::const_iterator from = in.cbegin(); bytes::const_iterator to = in.cend(); std::ostringstream oss; for (; from != to; ++from)原创 2021-12-20 13:35:57 · 2798 阅读 · 0 评论 -
VS Studio报错无法解析的外部符号 _imp_XXXXXXXXX
出现字符_imp,说明不是真正的静态库,而是某个动态库的导入库,导入函数和自己不同名,所以加了字符_imp。比如说_imp_GetUserNameA就是GetUserNameA函数。 会报这种错误的原因: 1、说明注册表函数没有相关的lib库,我们需要在MSDN下搜索函数。 2、如果有引入三方库文件,可能存在库编译时和自己的项目编译时的运行库选择不一致(MT/MTd/MD/MDd 打开以下网址Search | Microsoft Docs 右上角搜索 ,随便找一个搜索结果进入,就可以看到..原创 2021-12-14 09:27:09 · 1553 阅读 · 0 评论 -
C++标准库 第七章 STL迭代器
迭代器能力:行进和存取的能力Input迭代器一次一个向前读取元素,按此顺序一个一个返回元素 例子:从标准输入装置(键盘) 读取数据,同一个数据不会被读取两次,流水一样,指向的是逻辑位置 使用前置式递增运算符 ++x 替代后置式递增运算符x++,前者不需要返回旧的数值,不需要花费一个对象来保存旧的数值 Input无递减运算操作符号Output输出迭代器和input迭代器相反,作用是将元素数值一个一个写入。不可以使用输出迭代器对同一序列进行两次遍历写入、 operator*.原创 2021-12-03 13:53:52 · 346 阅读 · 0 评论 -
STL源码剖析 第八章 配接器
设计模式:将一个类的接口转化为另外一个类的接口配接器的概观和分类改变仿函数接口 函数配接器 ;queue和stack 通过修饰deque函数接口来实现 改变容器接口 容器配接器 ; insert、reverse、iostream 等iterators他们的接口可以由iterator获得insertiterator将一般迭代器的赋值操作转变为插入操作 例子:尾部插入 back_insert_iterator ; 头部插入 front_insert_iterator ;任意位置...原创 2021-12-02 21:59:25 · 975 阅读 · 0 评论 -
STL源码剖析 第七章 仿函数(函数对象)
函数对象:具有函数性质的对象 使得用户像使用函数一样使用它 一般函数提供两个版本,第一个版本使用operator < ;第二版本需要用户 指定某种操作 第二版本就是设计一个函数,将函数指针作为算法的一个参数;或者将函数操作设计成为一个仿函数,就语言层面是一个class,再以该仿函数产生一个对象,并以此对象作为算法的一个参数 函数指针就可以完成任务,为啥需要引入 函数对象呢?因为函数指针无法满足STL对抽象性的要求,也无法适配STL的其余组件(适配器)搭配,产生灵活的变化 仿函数就是行为类似函原创 2021-12-02 17:14:18 · 529 阅读 · 0 评论 -
STL源码剖析 lower_bound | upper_bound | binary_search
lower_bound二分查找的一种版本,试图在已经排序的区间内查找元素value,如果区间内存在和value数值相等的元素,便返回一个迭代器,指向其中的第一个元素。 如果没有数值相等的元素,会返回假设这个元素存在的前提下应该出现的位置,也就是返回一个指向第一个不小于value的元素的迭代器 如果查询的数值value大于区间内任何一个元素则返回last 综上所述:lower_bound返回的是不破坏排序状态的前提下,可插入value的第一个位置版本一使用operator< 版本二使用原创 2021-12-02 14:29:32 · 1634 阅读 · 0 评论 -
STL源码剖析 数值算法 heap算法
算法adjacent_find count count_if find find_if find_end for_each generate generate_n includes max_element merge min_element partition remove remove remove_copy remove_if remove_copy_if replace replace_copy replace_if replace_copy_if r原创 2021-11-30 18:02:34 · 855 阅读 · 0 评论 -
STL源码剖析 Set相关算法 并集 set_union|交集 set_intersection|差集 set_difference |对称差集 set_symmetric_difference
注意事项四种相关算法:并集、交集、差集、对称差集 本章的四个算法要求元素不可以重复并且经过了排序 底层接受STL的set/multiset容器作为输入空间 不接受底层为hash_set和hash_multiset两种容器并集 set_unions1 U s2 考虑到s1 和 s2中每个元素都不唯一,如果单个元素在S1中出现了m次,在s2中出现了n次,那么该数值在并集区间内出现的次数是 max(n,m),假设m小于n。那么m个数来自s1,m-n个数来自s2 稳定算法 相对次序不会改变 版原创 2021-11-29 16:44:09 · 462 阅读 · 0 评论 -
STL源码剖析 数值算法 copy_backward 算法
copy_backward 时间技巧和copy类似 主要是将[first,last)区间范围内的元素按照逆行方向复制到以result-1为起点,方向同样是逆行的区间上 返回的迭代器的类型是result - (last - first) copy_backward支持的类型必须是BidirectionalIterators ,才可以逆向拷贝template <class BidirectionalIterator1,class BidirectionalIterator2>Bidi原创 2021-11-29 14:40:26 · 254 阅读 · 0 评论 -
STL源码剖析 数值算法 copy 算法
copy复制操作,其操作通过使用assignment operator 。针对使用trivial assignment operator的元素型别可以直接使用内存直接复制行为(使用C函数 memove或者memcpy)节约时间。 还可以通过函数重载(function overloading)、型别特性(type traits)、偏特化(partial specialization)等技巧进一步强化效率。copy函数将[first,last) 内的元素复制到区间[result,result+(last原创 2021-11-29 14:26:51 · 729 阅读 · 0 评论 -
STL源码剖析 基本算法 equal | fill | iter_awap | lexicographical_compare | max | min | swap |mismatch
Equal两个序列在[first,last)区间内相等,equal()返回true。以第一个序列作为基准,如果第二序列元素多不予考虑,如果要保证两个序列完全相等需要比较元素的个数if(vec1.size() == vec2.size() && equal(vec1.begin(),vec1.end(),vec2.begin()));或者可以使用容器提供的equality操作符,例如 vec1 == vec2 如果第二序列比第一序列的元素少 ,算法内部进行迭代行为的时候,会超越序原创 2021-11-29 11:10:55 · 429 阅读 · 0 评论 -
STL源码剖析 数值算法 accumulate | adjacent_difference | inner_product | partial_sum | power | itoa
//版本1template <class InputIterator,class T>T accumulate(InputIterator first,InputIterator last,T init){ for(;first != last; ++first){ init += *first; //将每个元素数值累加到init身上 } return init;}//版本2template <class InputIterator,..原创 2021-11-27 21:26:12 · 361 阅读 · 0 评论 -
C++for_each| bind1st | ptr_fun | std::function的用法
c++ for_each 用法_小键233-优快云博客原创 2021-11-27 15:04:36 · 487 阅读 · 0 评论 -
STL源码剖析 hashtable
二叉搜索树具有对数平均时间的表现,但是这个需要满足的假设前提是输入的数据需要具备随机性 hashtable 散列表这种结构在插入、删除、搜寻等操作层面上也具有常数平均时间的表现。而且不需要依赖元素的随机性,这种表现是以统计为基础的hashtable的概述hashtable可提供对任何有名项的存取和删除操作 因为操作的对象是有名项,因此hashtable可以作为一种字典结构 将一个元素映射成为一个 “大小可以接受的索引”简称为hash function散列函数 考虑到元素的个数大于array的容原创 2021-11-26 15:18:48 · 1064 阅读 · 0 评论 -
STL源码剖析 multiset 和 multimap
multiset和set完全相同,唯一的差别在于允许键值的重复,因此底层操作使用的是红黑树的insert_equal() 而不是insert_unique() multimap和map完全相同,唯一的差别在于允许键值的重复,因此底层操作使用的是红黑树的insert_equal() 而不是insert_unique()...原创 2021-11-25 15:47:58 · 241 阅读 · 0 评论 -
STL源码剖析 map
所有元素会根据元素的键值自动被排序元素的类型是pair,同时拥有键值和实值;map不允许两个元素出现相同的键值 pair 代码template <class T1,class T2>struct pair{ typedef T1 first_type; typedef T2 second_type; T1 first; //public T2 second; //public pair():first(T1()),second(T2()原创 2021-11-25 15:43:55 · 1109 阅读 · 0 评论 -
STL源码剖析 set集合
set的特性是 所有的元素会按照键值自动排序 set 的键值等同于实值 set不允许涵盖两个相同的键值 不可以通过迭代器修改set的元素数值,这会破坏元素的排列顺序。因此set<T>::iterator 被定义为底层RB-tree的const_iterator,杜绝写入。也就是set的iterators是一种constant iterators 相对于mutable iterators set类似list,当客户端对其进行元素的新增或者删除操作的时候,操作之前的迭代器不会失效,但是被操作原创 2021-11-24 21:23:49 · 274 阅读 · 0 评论 -
STL源码剖析 关联式容器 红黑树
概念红黑树不仅仅是一个二叉树,必须满足如下条件 1,每个节点不是红色就是黑色 (深色底纹为黑色,浅色底纹为红色) 2,根节点是黑色的 3,如果节点为红,其子节点必须为黑色的 4,任一节点至NULL(树的尾端)的任何路径,所含的黑节点的数量必须相同插入节点分别插入 3 8 35 75 ,他们均破坏了红黑树的规则,需要调整树形,两种方式(修改颜色 或 旋转)产生不平衡的状态,即高度相差1以上。这没关系,因为RB-Tree是一种弱平衡性,他是按照颜色进行高度的限定,保证在弱平衡..原创 2021-11-24 19:50:07 · 1147 阅读 · 0 评论