自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Markus

心之所向,素履以往 生如逆旅,一苇以航

  • 博客(98)
  • 收藏
  • 关注

原创 TEA系列加解密算法详解

文章目录TEA系列概述TEA算法介绍TEA加密过程C语言实现:XTEA算法介绍XTEA加密过程C语言实现XTEA算法介绍XXTEA加密过程C语言实现参考TEA系列概述TEA算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明,TEA是Tiny Encryption Algorithm的缩写,以加密解密速度快,实现简单著称。TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮

2020-07-20 01:01:09 9766 1

原创 CMake编程实践(六) 模块使用和自定义模块

文章目录模块使用和自定义模块使用系统预定义的FindCURL模块编写自定义的UtilsBox模块编译执行小结模块使用和自定义模块cmake开发者在开发过程中认为纯粹依靠cmake本身提供的基本指令来管理工程是也一件非常复杂的事情,所以cmake设计成了可扩展的架构,可以通过编写一些通用的模块来扩展cmake, 系统中提供了其他各种模块,一般情况需要使用INCLUDE指令显式的调用,FIND_P...

2020-04-25 23:39:32 1126

原创 CMake编程实践(五) 编译静态库和动态库

使用Cmake 编译库本篇使用CMake编译一个动态库和静态库,并安装到系统中,对应的工程是cmake-utilsbox-lib编译静态库指定编译静态库,关键词为static,不添加关键字默认静态库add_library(utils ${LIB_SOURCE})在使用该库的工程中链接都刚才编译的库:target_link_libraries(${PROJECT_NAME} utils...

2020-04-25 23:33:28 7670 2

原创 CMake编程实践(四) 控制指令

文章目录控制指令IF指令基本语法 if-else-endif:基本语法:if-elseif-endif正则比较表达式数字比较表达式:按照字母序的排列进行比较:小括号优先计算WHILE指令FOREACH指令使用列表 FOREACH(loop_var arg1 arg2 ...)使用范围 FOREACH(loop_var RANGE total)使用范围和步进 FOREACH(loop_var RAN...

2020-04-25 23:30:56 294

原创 CMake编程实践(三) 常用变量和常用环境变量

文章目录常用变量和常用环境变量cmake 变量引用的方式:自定义变量的方式:cmake常用变量:1. CMAKE_BINARY_DIR2. CMAKE_SOURCE_DIR3. CMAKE_CURRENT_SOURCE_DIR4. CMAKE_CURRRENT_BINARY_DIR5. CMAKE_CURRENT_LIST_FILE6. CMAKE_CURRENT_LIST_LINE7. CMAK...

2020-04-25 23:29:01 906

原创 CMake编程实践(二) 常用语法

文章目录CMake常用语法PROJECT 定义工程名称SET 定义变量MESSAGE 输出信息ADD_EXECUTABLE 定义可执行文件INCLUDE_DIRECTORIES 添加头文件路径LINK_DIRECTORIES 添加库的路径TARGET_LINK_LIBRARIES 为target添加共享库INSTALL 安装指令配置CMAKE环境变量ADD_DEFINITIONSADD_DEPEN...

2020-04-25 23:26:24 532

原创 CMake编程实践(一) 基础CMake工程入门

文章目录CMake简介CMake 是什么?CMake的工作流程环境要求分析一个简单的CMake工程基本语法规则:编译安装编译生成的应用在哪里?安装到哪里?安装那些内容?CMake简介CMake 是什么?CMake是一个开源的跨平台工具系列,旨在构建,测试和打包软件。CMake用于使用简单的平台和独立于编译器的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用的本机makefile...

2020-04-25 23:21:33 955

原创 vscode中配置或添加头文件路径

vscode中配置或添加头文件路径在vscode中按Ctrl+Shift+P 输入configuration 在c_cpp_properties.json中includePath字段中添加待添加的SDK或者库的头文件路径 例:"/usr/local/xxx/include/"{ "configurations": [ { "name": "Li...

2020-04-06 15:58:49 37376 2

原创 gnuplot绘图教程(一)

目录1 gnuplot简介1.1 gnuplot安装(ubuntu)1.2 测试是否安装成功1 gnuplot简介gnuplot 是一个小巧实用的数据处理工具,主要用来绘制2D/3D的数据或者函数图像,但是也包含数学计算、拟合等功能。虽然它的名字里有个 “gnu”,但是它和大名鼎鼎的 GNU 没什么关系,使用的授权协议也不是 GNU GPL,所以这里的 “gnu” 是小写,全名应该读作 “ne...

2020-03-21 11:09:37 2174

原创 shell判断文件结尾是否有回车符

tail -n1 <your file> | wc -l输出为1表示有换行, 输出为0无换行e.g :if [ $(tail -n1 <your file> | wc -l) -eq 1 ];then echo "The file line End "fi

2020-01-12 00:46:02 4191 1

原创 Shell Programming in Unix, Linux and OS X, 4th Edition 笔记

文章目录Shell Programming in Unix, Linux and OS X, 4th Edition 读书笔记,随缘更新~shell脚本中的单引号和双引号以及反引号详解loading…

2020-01-12 00:27:46 242

原创 [笔记] shell脚本中的单引号和双引号以及反引号详解

文章目录引用单引号'双引号"反斜线\反引号`引用在第五章中讲到shell中的引用,shell能识别到4种不同的引用字符:单引号’双引号"反斜线\反引号`前两种和最后一种必须成对出现,而反斜线可以在命令中根据需要多次出现,这些引用字符在shell中的含义和功能各不相同。单引号’shell碰到第一个’,在遇到用于封闭的’之前,shell会忽略单引号对中引用的所有特殊字符,即不再解...

2020-01-12 00:20:02 1663

原创 父scrollview拦截到其他子控件的touch事件的解决方法

概述父Scrollview中放置了一个RockerView,在RockerView中上下滑动时触发scrollview的滑动,导致了RockerView不能正常使用。解决原因是因为事件分发时被父容器view给消费了。所以导致子View没有获取到触摸事件,所以也就没有响应了。详见:Android事件分发机制深度分析(一)解决办法有很多,可以复写一个scrollview,在其中特别处理事件分...

2019-12-30 23:53:30 1175

原创 Valgrind检测内存泄漏

概述任何长期运行的应用程序都必须正确地管理内存,否则它最终会耗尽所有可用内存并崩溃,如果你使用的是自动为你管理内存的语言,那么祝贺你,如果你用C/C++则需要你负责内存管理,这里有一个valgrind的简短教程,这个工具将对你的程序的任何内存泄漏出具报告。Valgrind是用于构建动态分析工具的仪器框架。有Valgrind工具可以自动检测许多内存管理和线程错误,并详细描述程序。您也可以使用Va...

2019-12-30 23:41:52 1083

原创 Android Studio 3.2配置ButterKnife

文章目录概述:安装Android butterknife Zeleny插件配置使用概述:ButterKnife是android studio 中一个自动生成和关联viewUI控件与view变量的一个工具,人称黄油刀,可以极大提高工作码代码效率,但不同的Android studio版本对应有不同的版本,下面是android studio 3.2版本的配置过程:安装Android butterk...

2019-11-29 00:02:55 227

原创 各国语言缩写以及国际域名缩写

文章目录各国语言缩写国际域名缩写各国语言缩写en 英文en_US 英文 (美国)ar 阿拉伯文ar_AE 阿拉伯文 (阿拉伯联合酋长国)ar_BH 阿拉伯文 (巴林)ar_DZ 阿拉伯文 (阿尔及利亚)ar_EG 阿拉伯文 (埃及)ar_IQ 阿拉伯文 (伊拉克)ar_JO 阿拉伯文 (约旦)ar_KW 阿拉伯文 (科威特)ar_LB 阿拉伯文 (黎巴嫩)ar_LY 阿拉...

2019-11-28 23:48:26 2064

原创 VSCode: PlatformIO IntelliSense Index Rebuild 解决

概述在vscode中打开platformio时,PIO Home一直处于加载状态 主页上一直显示loading在左下方的状态栏中提示PlatformIO IntelliSense Index Rebuild 任务一直在运行环境:ubuntu16.04vscode 并无自动更新过PlatformIO IDE插件版本1.9.0初步怀疑是PlatformIO IDE插件自动升级造成的,和p...

2019-10-16 23:14:58 8616 6

原创 getDeclaredFields获取到$change以及serialVersionUID成员解决

概述最近在使用Android Studio时遇到使用getDeclaredFields获取到$change成员的问题,代码如下:public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protec...

2019-10-13 01:20:03 722

原创 Excel表格对比合并图形显示工具(支持Git或Mercurial)

概述ExcelMerge是用于Excel或CSV Diff的图形显示工具。当前功能仅限于显示Diff,但目标是实现合并功能。它也可以用作Git或Mercurial的差异工具。系统要求Windows 7或更高版本支持的文件类型.xls.xlsx.csv.tsv安装从此处下载ExcelMergeSetup.msi 并运行。项目开源链接https://github.com/s...

2019-10-13 00:14:34 2620

原创 Linux系统下查看指定命令的安装位置

概述在linux命令行中运行各种命令时,会遇到需要配置或者卸载该命令的情况,这时候就需要找到这个命令存放的目录解决1.which + 命令会出现这个命令的路径,如果不是软链接的话,这就是此软件的安装路径;如果是软连接的话,那么下一步$ which echo/bin/echo2.进入上面的路径下,输入:ls -al 要查找的命令会显示它的真实安装路径。...

2019-10-13 00:04:37 575

原创 error: expected '(' before 'void' __ASM void xxx

概述使用gcc 编译时才会出现这种错误,在keil中虽然会标红,但可以正常编译解决去掉函数名称前的__ASM使用__ASM volatile()将汇编语句包裹起来例如:__ASM void MSR_MSP(u32 addr){MSR MSP, r0 //set Main Stack valueBX r14}修改成下面void MSR_MSP(u32 addr){_...

2019-10-12 23:54:33 7843 2

原创 Base64编码中有回车换行符

概述RFC2045[https://www.ietf.org/rfc/rfc2045.txt]中有规定:The encoded output stream must be represented in lines of no more than 76 characters each.Base64一行超过76字符后会自动添加回车换行符。当编码一个长字符串时,会出现每隔76个字符添加一个回...

2019-10-12 23:50:03 4178 1

原创 获取网卡Mac地址(grep、正则表达式)

文章目录在命令行或者脚本中获取指定网卡的mac地址方法1方法2在命令行或者脚本中获取指定网卡的mac地址方法1ifconfig |grep HWaddr |head -n 1 | grep -o "[a-f0-9A-F]\\([a-f0-9A-F]\\:[a-f0-9A-F]\\)\\{5\\}[a-f0-9A-F]"输出如下:AA:BB:CC:DD:EE:FF方法2ifcon...

2019-08-27 22:49:41 1559

原创 linux下iwconfig命令参数

文章目录iwconfig用法说明参数essidnwidnickmodefreq/channelaprate/bittxpowersensretryrtsfragkey/enc[ryption]powercommit设置ath1无线网卡的channel 为11设置模式:通过MAC 设置AP:连接到WEP on 的AP:断开WEP:查看IP:设置IP:把IP: 192.168.100.123 , ne...

2019-08-27 22:40:26 1578

原创 C++ lock_guard 自动释放锁

概述根据对象的析构函数自动调用的原理,c++11推出了std::lock_guard自动释放锁,其原理是:声明一个局部的lock_guard对象,在其构造函数中进行加锁,在其析构函数中进行解锁。最终的结果就是:在定义该局部对象的时候加锁(调用构造函数),出了该对象作用域的时候解锁(调用析构函数)。使用方法首先需要包含mutex头文件然后创建一个锁 std::mutex mutex在需要...

2019-07-22 12:53:12 3940

原创 VSCode CMake 安装与配置详解

概述在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。所需工具:VSCode (需要安装以下插件)C/C++C++ IntellisenseCMakeCMake toolsCMake Tools HelperCMakeMinGW安装CMake下载链接:...

2019-06-25 00:35:28 72220 29

原创 vscode 优化.vscode/ipch(解决格式化失效以及占用存储空间大的问题)

概述使用vscode打开一个文件夹,然后随便编辑几个C++代码文件,跳转几个函数,然后就能看到在该文件目录下生成了一个.vscode的文件夹然后进入到.vscode文件夹后,继续进入ipch文件夹随便打开一个文件夹可以看到每个缓存目录中缓存文件大小为2M解决占用存储空间大ipch文件夹内包含缓存的预编译头文件(PCH),vscode使用的时间越长,那么这个文件夹内的缓存就越...

2019-05-27 00:07:40 6929 1

原创 在Mac平台下使用tar压缩生成 "._" 文件的解决办法

概述最近在Mac平台下压缩文件夹时,然后在Linux平台解压后,发现每一个文件都多了一份 ._ 开头的文件副本,例如,我们的正常文件里面是这样的:files | 001.txt | 002.txt | 003.txt在 Mac 平台下使用如下命令对其进行压缩:tar -zcvf files.tar.gz files然后把 files.tar.gz 复制到Linux系统中,...

2019-05-26 23:28:47 5327

原创 C/C++ 开发利器 CLion安装与配置

概述CLion是Jetbrains公司旗下新推出的一款专为开发C/C++所设计的跨平台IDE,它是以IntelliJ为基础设计的,同时还包含了许多智能功能来提高开发人员的生产力,提高开发人员的工作效率。这个强大的IDE不仅可以帮助开发人员在Linux、OS X和Windows上来开发C/C++,同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CMake编译系统,从而提高开发人员的工...

2019-04-14 22:28:35 12046 1

原创 #pragma once与 #ifndef比较

在C++的编程中为了避免同一个文件被include多次,一般有以下两种方式,在能够支持这两种方式的编译器上,这两种方式并没有太大的区别。1. #ifndef#ifndef的方式兼容C语言,主要依赖于宏名字不能冲突,这不仅可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心"撞车",可能就会导致头文件明明存在,编译器却一直...

2019-03-31 18:12:38 270

原创 C++ String去除头尾空格 实现trim()方法

虽然C++11的标准库中并没有提供trim()方法,但我们可以使用string的find_first_not_of,和find_last_not_of方法实现trim()#include <iostream>#include <string>std::string& trim(std::string &);int main() { st...

2019-03-31 17:51:24 8451 1

原创 C++ find_first_not_of() 和 find_first_of() 和 find()

find_first_not_of()函数查找当前string与指定的字符串中任意一个字符都不相符的字符,并返回该字符在字符串中第一次出现的位置。size_t find_first_not_of ( const string& str, size_t pos = 0 ) const;size_t find_first_not_of ( const char* str, size_t ...

2019-03-31 15:26:18 3269

原创 C++ this指针

意义系统在创建对象时,默认生成的指向当前对象的指针,这样做的目的,就是为了带来方便。作用1.避免构造器的入参和成员名相同。2.基于this指针的自身引用还被广泛的应用于那些支持多重串联调用的函数中,比如连续赋值。3.每个类成员函数的参数列表中,会由编译器自动传入this参数(this指针指向当前对象),以下仅是示例this是如何被传入的,现实中这样写编译器会报错的。MyString *...

2019-03-31 11:32:31 165

原创 自定义ViewGroup不可或缺的ViewDragHelper工具类

ViewDragHelper概述ViewDragHelper实质上是对父ViewGroup中的子view的滑动操作、重新定位视图以及状态跟踪等做了一系列的封装,即只需输入父ViewGroup的TouchEvent,则会通过Callback返回子View的相关操作。省去了程序员需要对ViewGroup中不同子View的各种TouchEvent进行非常复杂的逻辑处理。所以ViewDragHelper...

2019-02-21 23:28:09 338

原创 Android事件分发机制深度分析(四)

View事件分发机制的源码解析ViewGroup不论是拦截事件或者将事件分发给子View,其最终都是调用了View的dispatchTouchEvent方法,毕竟ViewGroup也是继承自View。所以下面分析View#dispatchTouchEvent源码来了解View事件分发机制。 public boolean dispatchTouchEvent(MotionEvent eve...

2019-02-21 00:33:56 220

原创 Android事件分发机制深度分析(三)

ViewGroup事件分发的源码解析虽然ViewGroup是继承自View,但ViewGroup和View的事件分发的处理还是不一样的,所以这里分开来讲。当点击事件到达ViewGroup时,会调用ViewGroup的dispatchTouchEvent方法。而dispatchTouchEvent方法中又会调用onInterceptTouchEvent方法,这时会出现下面两种情况:如果该Vie...

2019-02-21 00:26:15 240

原创 Android事件分发机制深度分析(二)

从Activity到根ViewGroup事件分发的源码解析上篇有提到点击事件经过层层传递来到了当前Activity,当事件到达当前Activity时,会调用Activity#dispatchTouchEvent方法: public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == Moti...

2019-02-21 00:15:13 223

原创 Android事件分发机制深度分析(一)

概述对Android的事件分发已经研究一段时间了,主要涉及Activity-&amp;amp;gt;ViewGroup-&amp;amp;gt;View 之间的事件传递与拦截,主要源代码在android\view\ViewGroup.java、android\view\View.java 中。好记性不如烂笔头,觉得该记录下来,否则一段时间后又模糊了。所以就有了本篇文章,下面的文章中将对API-26(Android 8.0)中的...

2019-02-21 00:09:25 402

原创 Android studio 3.2.0 使用Android Device Monitor 调试View

概述需要分析一个APP的UI组成,准备用DDMS中的Hierarchy View工具来完成,结果Android Studio 3.2 中竟然没找打DDMS的打开入口,Google后发现下面的说明:1.来自Google官方文档的一段话:https://developer.android.com/studio/profile/monitor.html#usageHowever, most c...

2019-02-15 11:15:50 3821

原创 排序算法之七 堆排序(Heap Sort)

概述堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法描述将待排序的元素序列(R1,R2….Rn)构建成最大堆,此堆为初始的无序区。(关于最大堆的详细构建过程请点这里)将最大堆的堆顶元素R1(当前堆树中的最大值)与最后一个元素Rn交换。此时得到新的无序区(R1...

2019-01-12 16:19:53 504

空空如也

空空如也

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

TA关注的人

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