自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 资源 (3)
  • 收藏
  • 关注

原创 C++ 命名空间

这种用法的优先级更高,所以也会忽略掉using namespace myspace;所以这两者共同使用完全没问题。后,编译器会在当前的作用域查找变量和函数是否属于mysapce。如果我们不想加上命名空间名使用,则开头加上using namespace myspace 引用。可以看到,定义命名空间后,就可以放心的在里面写代码了,不用担心和其他文件命名冲突了。头文件中,写命名空间的声明,变量要加上extern ,函数名可以不用加,如。using了命名空间,然后又再指定命名空间mysapce::couta.

2025-03-26 21:53:29 582

原创 c++ map和vector模板类

但是上面这种用法有危险,为什么,因为你的键是指针类型的,它关联的是指针地址,并不是它指向的字符串,那么你的后续的增删改查都是通过地址值来实现了,这违背了我们预想的键值对的初衷,如zhengyong 字符串关联的是21.注意这里不能用vc[0]=11这样来添加元素,因为此时vc里是没有元素的vc[0]没有添加的功能,所以为空。好了,以上就是map大概的用法,更多的细节,比如map类的其它成员函数,大家可自行查找,这里就不过多的介绍了。好像是实现了功能,但这样的代码只实现很小的一部分,未来将会有很多问题。

2025-03-25 22:13:32 615

原创 C++语法之模板函数和模板类

所以像上面,调用时分别传入了int和char类型,那么编译器就会生成两个函数代码,一个是int类型,一个是char类型。所以得用到模板,可以先用模板代替,就好像方程式,先用x,y代替一样。这种模板函数,是在编译时根据调用的具体参数来生成函数代码,并不是编译后的代码实现了这个功能。所以在定义模板类对象时,必须显式指定类型,告诉编译器生成那种类型的类代码实例化。模板函数,适用于不同的类型有着共同的代码,本质上是为了方便灵活编程。这里的模板类跟模板函数一样,编译器是没有生成具体的代码的。就是尖括号加类型名。

2025-03-23 21:15:32 323

原创 C++ 语法之数组指针

比如定义了一个int b[2][3],可以看成是什么,可以看成是我们定义了2个一维数组a[3]。可以看到a[3]的地址,是在a[2]的基础上加了个四个字节,这就是数组的规则。可以看到内存的首地址是FAA8开始,注意这里的a和a[0]的地址是相等,因为它们都是代表数组的第一个地址。a+1的话,它就会在a的值加1, 指针变量+1的意思,是在原来的地址上,增加该类型的字节数。那么b[0]即b[0][0]的的首地址,这个跟前面一维数组同样的原理,a跟a[0]地址一样。它的跨度是一个a[3]的跨度 12字节。

2025-03-21 23:19:41 885

原创 C++ 头文件说明

那么如果你在test.h里面定义了一个变量a,而不是声明,就不要指望这个#ifndef 帮你解决冲突的问题,而且这样即使解决了(比如编译器改了逻辑,宏列表对所有cpp有效),也只是假象,因为它会把代码都清掉了(除了第一次文件),其它文件根本就访问不到这个变量a,自然也不会有冲突了。下面的那个int a的作用域是从定义处开始,到文件结束,不是对于整个CPP文件的,但你不能说,根据作用域,就可以在最上面再定义一个int a了(取消extern声明),这很显然会引起冲突的。只在当前cpp文件里有效。

2025-03-19 22:15:07 925 1

原创 C++ 语法之函数和函数指针

说了局部变量,这里有个有趣的点,有没有一种变量,我不想每次函数执行,重新分配和释放,是一直存在的,有,就是在函数内被static修饰的变量,这种变量跟全局变量一样,它的空间不是在堆栈中,而是静态内存空间中,从整个程序开始分配,运行期间一直存在,到程序结束才释放。地址是一样的,这是系统优化分配的原因,因为这个地址被释放了,下次分配还可以找同样的地址。我们可以从侧面来验证,有两个方法,第一个通过值的变化来验证,如果内存空间被释放了,那么的它的值如果没有保留,那可以证明函数执行完,局部变量已经被释放。

2025-03-18 21:16:59 940

原创 C++ 语法之 指针的一些应用说明

这是十六进制表达,可以看到前面还有一串0,我们数一下总共有8对,也就是16位,两位十六进制可以表示的范围是00-FF,十进制也就是0-255占一个字节,那么可以推断,指针变量本身占8个字节=64位二进制,ok,后面的sizeof也证明了此推断正确。相当于,在main函数定义了一个局部变量a,在test函数也定义了一个局部变量a,在test函数中自然无法改变main中a变量的值,虽然它们名字相同。因为int *p,p本身也个变量,指针变量,所以系统也得给这个变量分配内存空间,8个字节,用来存储地址内容。

2025-03-15 17:28:40 879

原创 八.在react中调用web3

react是一个构建前端的框架,通过创建虚拟dom的方式来编写前端。然后我们再通过ReactDOM.render()方法,将虚拟的dom转换成真实的dom,渲染上去。(因为浏览器可不认识虚拟的dom,只能识别真实的dom)而渲染的话,我们需要一个真实的dom作为目标节点,表示添加到该dom下。所以我们需要在html页面里先创建一个<div id='root'></div>element,<App />,你也可以看成是自定义了一个App html标签。

2024-12-02 20:11:25 909

原创 七.为简易版uniswap制作一个前端

在上一章中我们部署了一个合约,我们在remix里测试功能都正常,已经可以使用了,但是我们不能要求用户像我们这样使用合约,所以我们得设计一个对用户友好交互的前端。合约可以看成是后端,单纯的合约不能当做Dapp,后端+前端 我们才能称之为Dapp。我们在之前的学习中知道了前端和合约交互需要通过web3.js,现在我们需要通过它来现实如下几个功能。

2024-12-02 20:10:17 1118

原创 六.一个简易版的uniswap dex合约

uniswap是一个去中心化交易所,能使你在链上交易代币。大概实现思路是,先用两种代币打到合约地址,组成流动性,比如1个ETH和1000SBX。那么按这个比例,就是1个SBX价值0.001eth,在交换的时候。交易就是合约地址接收你发送过来的SBX币,然后计算出要给你打多少eth后,就从池子里的ETH拿相应数量转给你。就是这么一个过程。反之一样,当然这里面还有很多细节问题要解决。我们先来了解一些概念。

2024-11-29 20:03:48 835

原创 五.创建基于erc20标准的真实合约代币

为什么还要减1呢,假设是2位的,能存四个数字那就是2的2次方,然后存1,2,3,4?只要一个eip20.sol就可以了,并且代码改成了8.2版本的,(你们如果用老版本部署原来的也可以,将EIP20.SOL和EIP20Interface.sol复制过去,用remix的4.21编译器编译。在前一章中,我们创建了一个简单的代币合约,但是它只是在我们自己编写的前端中,进行查询,转账,它并不支持真实的链上,或者说钱包里显示余额和转账。name表示币的名字,decimals表示币的精度,就是小数点,支持多少位小数点。

2024-11-28 20:51:17 907

原创 四.Truffle运行代币合约小例子

但是使用了solidity的库功能,调用了自己编写的库函数convert,solidity里的库你可以看作是跟其它编程语言的库是一样的。跟函数定义差不多,只不过用event代替了function,事件名,和参数都是根据自己的需要定义的。意思是,每当有人发送代币,就触发事件Transfer,往外发送三个数据,分别是msg.sender发送代币的地址,接收代币的地址,和代币数量。比如storage增加如下代码,编译后,点部署,就会生成两个合约地址,一个是library的地址,一个是contract的地址。

2024-11-27 19:37:24 686

原创 三.用Truffle框架开发部署合约

truffle是专门为合约开发设计的框架,它可以很方便的编译,部署,测试合约。你不必再去remix平台,编译,然后复制ABI,手动来做这些繁琐的事情,基本上一个命令就解决。

2024-11-27 19:35:55 1250 1

原创 二.部署合约到测试网络并为合约制作一个前端

我们打开以太坊官网https://ethereum.org/zh/,点击开发者---相关文档----网络,然后有最新的领取方法,注意下面方法都有一定的时效性,测试币水龙头不一定每个时候都好用,所以有效的领取方以你现在的说明文档为准(包括测试网)还有一个问题是,我们调用metamask,要访问window.ethereum,只能在前端,但是在前端,require(web3),require未定义,这个是在nodejs下使用的。我们知道,部署合约是需要花手续费的,包括测试合约时有些也需要手续费。

2024-11-26 21:13:38 897

原创 一.开发工具ganache metamask remix部署调用合约

这个软件可以帮我们搭建一个私有的区块链,因为我们开发的时候,需要调试,测试也不可能在真实的区块链上实现,那样成本很高,部署合约都是需要gas费用的(手续费)。是加密货币钱包,只不过它是以插件的形式安装在浏览器上的。

2024-11-26 21:12:04 1884

原创 五.nodejs中的async和await的用法

那么知道了await是等待一个promise的状态,我们还可以单独编写一个loadPromise函数,只要有返回最终给await一个状态就行。async和await是es7(一种javascript语言标准)引入的新特性,是为异步编程而设计的,是对es6中异步编程的一种升级完善。这里的frist我还加了res参数,这个是await的返回值接收的是resolve('执行成功')的值,注意并不是promise。frist是后执行的,必须等promise里的异步完成,才能执行后面的代码。

2024-02-18 22:06:19 1848

原创 四.nodejs中setTimeout和promise的用法

PS:在这里,你们可以把函数也当成一个变量那样传递看待,那么一切就不会变得奇怪,比如函数随便变换名字,就像变量一样a赋给b或者,函数的一个变量参数,在函数里又变成另一个名字,但它们的值都是不变的。在前面的pc函数中,有两个参数,resolve和reject,这个传递的是两个函数,调用这两个函数,可以改变你创建的这个promise状态,promise有三种状态,Pending(未完成),Resolved(已完成)和Rejected(已失败)上面先定义一个fn函数,它的参数是需要一个函数。

2024-02-18 19:56:17 1703

原创 三.nodejs 之require

编写模块我们用到了 module.exports,exports是一个对象,我们用require请求后得到的就是这个对象,所以我们在模块中要对外实现什么,就通过exports输出。但这样会报错,因为nodejs中它找的是node_modules下的模块,所以我们可以创建一个node_modules文件夹,将name.js放进去,这样调用就正常了。而module也是一个对象,除了exports,它还有这个模块的其它属性,比如模块路径,模块id之类的,这里就不详细介绍了。然后node test.js。

2024-02-16 17:57:28 353

原创 二.nodejs实现加载index.html并响应js css文件。

test.js里的工作原理,就是获取url,然后提取js,css结尾的目录, 然后fs.readFile("."+request.url, 'utf-8',function (err, data) 读取对应的文件,响应即可。像之前我们创建了一网页服务,都是在代码里直接输出html给客户端,现在我需要将html和代码分开,单独写成一个index.html,该如何实现呢?但是这里会有问题,你的index.html如果加载了js文件,css文件,或者jpg图片,是不起作用的。test.js代码如下(来源网络)

2024-02-07 14:00:42 832

原创 一.nodejs创建一个网页服务并处理get请求

接着我们浏览器,输入127.0.0.0:7000,可以访问了,怎么样,是不是很简单的就创建了一个网站服务了。我们知道客户端的get请求,它的数据是通过url传递的,所以我们可以通过request.url获取数据。request,就是管理客户端到服务端的请求,里面可以处理从客户端get,post请求的的数据。然后request.url获得也是这样一个字符串,但是这是个字符串,我们还得提取里面的参数。这句是请求http模块。然后判断params.name参数,如果不为空,说明是要处理get请求的数据。

2024-02-03 20:22:00 406

原创 7.网页前端之javascript二

channelmode=yes|no|1|0是否使用剧院模式显示窗口。toolbar=yes|no|1|0是否显示浏览器的工具栏。是网页的地址,如果为空,则document文档里不会有任何内容,网页是空的,可以调用document.write给新网页添加内容。设置了新窗口的大小后,状态栏和菜单栏等都不见了,如果想要显示的话,设置属性为yes就可以了,如:menubar=yes,上面函数暗地里还传进了this,这个this就指向调用它的对象,这样就可以确定访问的是哪个对象了。status=yes。

2024-02-03 16:26:54 621

原创 6.网页前端之javascript一

str存储的是字符串,那么这样不使用new,直接给str赋字符串也是可以的,比如var str="ABCDEFG",像这个str依然能使用。onclick是a标签的一个事件属性,其它的标签也有,可以给给onclick指定一个函数,也就是当发生了onclick事件,就执行。当单击了元素,就链接到href属性指定的网址,所以我们禁止掉这个默认处理,当单击链接的时候,就不会链接到href指定的网址了。

2024-02-03 16:14:59 727

原创 5.前端入门之制作一个导航条

ul也设置float:left是因为,它的左右还要带个img标签,左右边角封闭,当然你如果不需要这个圆角矩形的效果,不带img图片,你也可以不用设置float:left。用ps的切片工具,把图片的两边取下来,还有中间也要取一部分(不是文字区域),分隔线的图片也取下来,那么就会有四张图片,如下:(它们的高度都是一致的)这里的li背景图片是分隔符,我们只需要每项前有一个就行,所以no-repeat不平铺,实现了有分隔图片的效果。源文件就不上传了,你们可以把文章里那几张图片另存为,然后试一下。

2024-02-03 15:57:49 1288

原创 PHP从零实现区块链(网页版五)地址、密钥和钱包

而pubkey是这笔input对应的公钥,用这个做账户地址标识。txoutput还是两个变量,但是地址变成了$pubKeyHash,公钥哈希,注意了这里跟txinput不一样,txinput存的是公钥,因为是好加解密,毕竟是用公钥来加解密,他的哈希可没这个功能。通过用私钥加密一段数据发送给你,我提前告诉你解密后的数据,然后你用公钥解密这个数据,如果和我发给你的解密数据对应上了。而公钥是用私钥生成的,但无法用公钥推算出私钥,从数学角度上,保证了安全性,只能穷举破解,但需要的算力是庞大的,等于不可能。

2024-01-29 22:02:18 2730 1

原创 ubuntu下安装两种版本laravel框架和php

接着,再运行php artisan serve终于OK,页面正常访问:(我已经在项目里写了个test.php页面:phpinfo())接着我们将这个composer.phar脚本,移动自己想要的目录,当然你也可以不移动。然后会提示一些php扩展没安装,我们依次安装(注意选择对应7.0的扩展)。OK,为了不影响原来的8.1版本,全局变量环境这些我们就不去改变了。1.假设你已经安装了php8.1版本和高版本的laravel框架。接着我们去下载php7.0对应的composer 2.2版本。

2024-01-27 22:53:43 687

原创 4.样式之margin、border、padding等位置相关属性

设置float为left表示,盒子向左浮动,而盒子的大小会依据盒子里的内容尽量缩小,比如pre设置了向左浮动,那么它的宽度会以文本的宽度为准,并且右边空出的空间,如果足以容纳下一个元素时,那么下一个元素就会出现在pre的右边。像之前使用的样式都是行内样式,就是把style写在一个标签内,这样做不怎么方便,如果我要所有a标签具有相同的样式,那每一个a标签,都要在里面指定一下style,这样太麻烦了,而且阅读起来也不方便。因为li项的大小是依据其里面的内容来的。其它的就没有了,都是前面讲过的。

2024-01-23 21:05:02 1392

原创 随笔混合,C#调用VC++编写的DLL

上面导入时,填了一个参数EntryPoint,指定入口函数,这样在下面可以给函数取一个别名GetTitle。首先用vc++编写一个DLL,打开VS2010,选择新建WIN32工程,在下一步的时候,选择建立DLL。可以看到,在VC++里,像DWORD,ULONG,USHORT之类的数字类型在C#中都可以用。我这里主要说的是,vc++中的各种变量类型,在C#中用什么样的类型代替。C#中传递一个string类型过去,然后DLL里,给它赋值,这边再取出。但要传递的数据,如果超过了int类型,那就用uint类型吧。

2024-01-22 23:17:11 931

原创 PE文件结构分析及应用三

VirtualSize的值是节的真实大小,即不经过对齐的节大小,VirtualAddress是节在内存的位置(按照内存中对齐方式),是SectionAlignment的整数倍,SizeofRawData是节在文件中对齐后的节大小,如果一个节位置在1000,它的大小为234,那么经过对齐后节大小就是536(假设对齐值为512)PointerRawToData是节在文件中的位置。如果位28 IMAGE_SCN_MEM_SHARED(内存共享节)被置1,表示节中的数据在映象文件的所有正在运行的实例中共享。

2024-01-19 23:15:21 539

原创 PE文件结构分析及应用二

ImageCount确定图标的数量,ResourceID在PE文件用于确定图标的ID,也就是上面的1,2,3,4,5。相对于位图在PE文件的储存方式,图标并没有像位图那样去掉了位图文件头,图标所有的数据都存储在PE文件里,但图标跟位图的区别不只这一点,图标在PE文件是分开来储存的,也就是图标被分为了两部分存储在PE文件里,这一点从“Id(资源类型ID)成员的取值”那里可以看出,3代表Icon(图标)14代表图标组(图标组)。//移到文件头位置,加4略过PE标志。//移到文件头位置,加4略过PE标志。

2024-01-19 23:12:48 979

原创 PHP从零实现区块链(网页版四)交易1

如果存在的话,就找出是哪个output,就是每循环一个output就和spentTXOS[txID]下所有的索引对比一下,如果相等,则表明这个output就是被花费过的,则跳到第二层循环,继续下一个output。这个spentTXOS存储有这个地址的input,并且行数是以交易区块ID作为元素下标名的,是个二维数组,列存着索引。注意这里的输入输出针对的主体是交易区块,比如输出给张三50个币,那么这个币得有个来源,input就指明了来源,那么可以知道,一个交易区块内,两边的币数是相等的。

2024-01-18 21:56:02 1931 1

原创 解决程序访问网页没有Cookie的问题。

*获取网站的Cook,cook储存在response.Cookies*/上面Cookie里的Domain填的是网站服务器的主机名,可填IP地址。/*访问该网站,把获得的Cook再传过去*///读取网站里的所有数据。//读取网站里的所有数据。/*设置Cookie*/

2024-01-14 21:17:01 1481

原创 C# const static readonly

const 和static readonly的区别。(非静态方法可以正常访问静态方法和成员)

2024-01-14 21:11:25 484

原创 PE文件结构分析及应用一

先来看一下OriginalFirstThunk这个成员,这个成员指向了一个IMAGE_THUNK_DATA数组,这个数组的大小是如何确定的呢,依据从模块导入函数的数量来确定,如果说这个结构的Name成员对应的动态链接库名为user32.dll,并从这个库导入了十个函数,那么IMAGE_THUNK_DATA数组大小就是十。//当NameIsString为1时,这个成员才有效,它指向一个IMAGE_RESOURCE_DIR_ STRING_U结构(偏移)

2024-01-14 19:24:58 1020

原创 VC使用GDI+技术实现的屏幕监控

可一到别人电脑上,只可以坚持几十秒钟,就出问题了,难道是数据丢失了,对不上了。如果不是的话,那也算了,因为我估计,可能花很久时间我也找不出来,只能是以后对某些知识点有更深入的了解再来找了。如果是直接点击应用程序运行的话,那么请运行Release版的程序,因为我生成的是Release版的,Debug版是以前的,会有错,客户端和服务端都得Release版。,只有代码,没多少说明,不懂的可到网上另找相关资料。似乎就这些了,反正有完整的工程,可以直接到工程里看,需要手打的代码估计不会超过一百行,还觉得难么。

2024-01-13 10:43:33 1035

原创 VC MFC进程条(CProgressCtrl)控件

/设置进程条上下限(范围)void CProgressCtrl::GetRange( int& nLower, int& nUpper );//获得进程条上下限。//计算进程条当前宽度。

2024-01-13 10:30:08 688

原创 VC MFC滑块(CSliderCtrl)控件

从CSliderCtrl类派生出子类CNewSliderCtrl,由于滑块控件不像前几个控件那样复杂,所以自绘,就直接在WM_PAINT消息处理函数中进行就行了,给CSliderCtrl添加WM_PAINT消息处理函数,这里我仅简单的自绘一下。//设置滑块范围,nMin最小值,nMax最大值。//获取滑块通道区域。//获取滑块通道区域。

2024-01-13 10:29:31 635

原创 VC MFC列表框(CListBox)控件

关于列表框背景位图的问题,可以响应对话框的WM_CTLCOLOR消息,在这个消息处理函数中,判断是否为列表框,如果是那就返回一个位图画刷,如在对话框类添加一个CBrush变量 brush;接着准备两张位图,一张用于列表框的背景,一张用于项选中时的背景,ID号分别为:IDB_BK、IDB_SELECTED。m_ListBox.AddItem(IDB_BITMAP3,"聆听(小鸟在唱歌...)");m_ListBox.AddItem(IDB_BITMAP5,"大地(在那些....)");

2024-01-13 10:28:56 1386

原创 VC MFC标签(CTabCtrl)控件

首先往对话框添加标签控件,调整至合适大小,关联变量m_TabCtrl,再添加两个控件,用于标签项显示,分别是列表视图控件,关联变量m_ListCtrl,树视图控件,关联变量m_TreeCtrl.rect.DeflateRect(0,itemRect.Height()+4,0,0);m_TreeCtrl.InsertItem("小明",hFriends);

2024-01-13 10:28:11 770

原创 C# GDI+编程(五)

怎么样,效果不错吧,但一拖动窗口就原形毕露了,注意到苹果下方的阴影了么,就是为了实现这个效果才会带来一些问题,或者说麻烦了许多吧。这个问题留待以后解决吧,在这里声明时,都用了IntPtr代替,这是没有办法的事,因为C#没有指针这个概念,而我们通过查HDC,和HWND类型定义时发现,它们都是指针类型。(题外话:在vc++中,客户区与非客户区有着不同的重绘消息,WM_PAINT和WM_NCPAINT,这一点要注意了,在刷新非客户区的时候,别重绘客户区,虽说不会出什么问题,但影响了效率总是不好的,能避免就避免)

2024-01-13 10:21:53 991

原创 C# GDI+编程(四)

如果填10,10,50,50那就是窗口的0,0,50,50显示在位图的10,10,50,50矩形区域内,窗口起始位置是不是能指定的,只能从位置0,0开始。第一个参数和第二个参数,指明是从屏幕的哪里开始复制,而后面的0,0,就是把屏幕复制到窗口里了,从窗口哪里开始显示。可以看到,当鼠标移动的时候,左上角的矩形明显闪烁了,这是因为进行了三次绘制,填充矩形,画矩形,显示文本。设置了不规则窗口,就可以把那张PNG图片绘制到窗口里去了,但由于半透明的问题,得先用透明画刷填充窗口,然后再绘制。

2024-01-13 10:21:14 933

C++ sha哈希算法文件,bitcoin v.0.1.0源码中提取

底层哈希算法

2025-04-02

php-blockchain-web源码

https://blog.youkuaiyun.com/d3582077/category_12546751.html 例子的源码

2024-01-30

VC API常用函数简单例子大全(1至89)

VC 注册表 INI文件 屏幕截图 远程注入 安装钩子,各种各样的函数应有尽用

2011-04-21

vc mfc 相关

vc mfc 相关

2010-12-10

空空如也

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

TA关注的人

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