人较笨且记性不好,故记录在此.折叠代码打不开请F5.本博中很多是转载收录其他网友的文章(原文地址请见博文末尾),所有权为原作者所有!!!
此博客已不再更新和维护,欢迎关注我的github新博客

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

2011年9月27日

摘要: 学习NDIS一段时间了,不过还是毫无头绪,理论都能明白,可是不知道怎么下手去做,网上没有没有太详细的教程。我是比较笨,而且比较懒的。:) 所以准备暂缓NDIS网络和驱动方面的学习,等今后遇见师父了再请教之,好运~ NDIS中的网络数据都是原始的,即没有经过主机协议栈处理的网络数据,如果学习网络协议的话,我觉得研究原始数据包还是挺合适的。 Socket通信中,主机A与主机B之间通信,Socket接收到的内容都是通信的内容,没有附带主机A或主机B的信息,这点可以回想最开始学习Socket编程的时候,主机A发送“Hello,mydearfriend.”,那么主机B收到的确实是“Hello,... 阅读全文
posted @ 2011-09-27 18:18 子坞 阅读(5017) 评论(2) 推荐(0) 编辑

摘要: HTTP 头部解释1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。2. Accept-Charset:浏览器申明自己接收的字符集 Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate) Accept-Language:浏览器申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。3. Accept-Ranges:WEB服务器表明自己是否接受获取其某个实体的一部分 阅读全文
posted @ 2011-09-27 17:40 子坞 阅读(25657) 评论(2) 推荐(3) 编辑

2011年9月20日

摘要: WinExec()ExitWindowsEx()GlobalMemoryStatus()GetSystemInfo()GetSystemDirectory()GetWindowsDirectory()GetTaskmanWindow() //user32.dll中 获取任务栏窗口句柄OpenProcessToken()打开一个进程的访问令牌GetCurrentProcess()获取本进程句柄LookupPrivilegeValue()修改进程权限AdjustTokenProvileges()通知WindowsNT修改本进程权利CreateRectRgn()CreateEllipticRgnIn 阅读全文
posted @ 2011-09-20 11:12 子坞 阅读(4251) 评论(0) 推荐(0) 编辑

2011年9月19日

摘要: 使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有问题,但是链接的时候总是报告函数不存在(经典的LNK 2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就会出现堆栈异常。这些现象通常是出现在C和C++的代码混合使用的情况下或在C++程序中使用第三方的库的情况下(不是用C++语言开发的),其实这都是函数调用约定(CallingConvention)和函数名修饰(DecoratedName)规则惹的祸。函数调用方式决定了函数参数入栈的顺序,是由调用者函数还是被调用函数负责清除栈中的参数等问题,而函数名修饰规则决定了编译器使用何种名字修饰方式来区分不同 阅读全文
posted @ 2011-09-19 23:11 子坞 阅读(340) 评论(0) 推荐(0) 编辑

2011年9月18日

摘要: 简介: RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n,e1)为公钥对,(n,e2)是密钥对。 RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n; e1和e2可以互换使用,即:A... 阅读全文
posted @ 2011-09-18 16:31 子坞 阅读(968) 评论(0) 推荐(0) 编辑

摘要: 概念: 模运算即求余运算。“模”是“Mod”的音译,模运算多应用于程序编写中。 Mod的含义为求余。模运算在数论和程序设计中都有着广泛的应用,从奇偶数的判别到素数的判别,从模幂运算到最大公约数的求法,从孙子问题到凯撒密码问题,无不充斥着模运算的身影。虽然很多数论教材上对模运算都有一定的介绍,但多数都是以纯理论为主,对于模运算在程序设计中的应用涉及不多。 模幂运算则是指先进行幂运算,在进行模运算。算法:1)描述: 根据运算规则ab % p = ((a % p)b) % p ,我们知道3333^5555(%10)= 3^5555(%10)。由于3^4 = 81,所以3^4(%10)= 1。 ... 阅读全文
posted @ 2011-09-18 16:18 子坞 阅读(6168) 评论(0) 推荐(0) 编辑

摘要: 概念: 最小公倍数(Least Common Multiple,缩写L.C.M.),如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数时,通常会借助最大公约数来辅助计算。 两个数的最大公因数和最小公倍数有着下列关系: 最大公因数×最小公倍数=两数的乘积 即(a、b)×[a、b]= a×b算法(代码):View Code 1 #include <stdio.h> 2 #include <iostream> 3 #include <math.h> 4 5 阅读全文
posted @ 2011-09-18 14:00 子坞 阅读(1350) 评论(0) 推荐(0) 编辑

摘要: 概念: 最大公约数(greatest common divisor,简写为gcd;或highest common factor,简写为hcf),指某几个整数共有因子中最大的一个。 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。算法:1、描述(欧几里德算法):欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。 其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 证明:a可以.. 阅读全文
posted @ 2011-09-18 13:28 子坞 阅读(954) 评论(0) 推荐(0) 编辑

摘要: 概念: 素数又称质数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数,素数个数是无穷的。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。合数是由若干个质数相乘而得到的。所以,质数是合数的基础,没有质数就没有合数。这也说明了前面所提到的质数在数论中有着重要地位。历史上曾将1也包含在质数之内,但后来为了算术基本定理,最终1被数学家排除在质数之外,而从高等代数的角度来看,1是乘法单位元,也不能算在质数之内,并且,所有的合数都可由若干个质数相乘而得到。判断素数的算法(源码):View Code 1 /******.. 阅读全文
posted @ 2011-09-18 11:51 子坞 阅读(466) 评论(0) 推荐(0) 编辑

2011年9月17日

摘要: rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数:函数一:int rand(void);从srand (seed)中指定 阅读全文
posted @ 2011-09-17 15:04 子坞 阅读(628) 评论(0) 推荐(0) 编辑

2011年9月13日

摘要: (转载,原文链接:http://www.enjoysoft.cn/blog/post/62.html) 使用C++标准库的iostream,可以方便地将控制台、文件、字符串以及其它可扩充的外部表示作为流来处理,但要处理中文,却会碰到很多问题。本人原来没怎么用过这个iostream,这几天尝试用这个写点东西,一会儿不能输出中文,一会儿不支持中文文件名的,搞得头大。网上搜了搜,没有发现适用于所有情况的解决方案。不过后来自己经过多次测试,基本解决了这些问题,现在写成文字作为一个总结,也供碰到同样问题的朋友参考。关于C语言中的 printf和wprintf的中文输出,本文也进行了探讨。 需要说明的.. 阅读全文
posted @ 2011-09-13 08:12 子坞 阅读(4094) 评论(1) 推荐(1) 编辑

2011年9月1日

摘要: 之所以抛弃char *的字符串而选用C++标准程序库中的string类,是因为它和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,它集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 =进行赋值操作, ==进行比较, +做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。首先,为了在我们的程序中使用string类型,我们必须包含头文件<string>。如下:#include<string> //注意这里不是string.h(string.h是C字符串头文件)1.声明一个C++字符串声明一个字符串变量很简单: 阅读全文
posted @ 2011-09-01 23:54 子坞 阅读(426) 评论(0) 推荐(0) 编辑

2011年8月31日

摘要: 1 #include <stdio.h> 2 3 int&foo(int a) 4 { 5 static int t; 6 t = a; 7 return t; 8 } 9 10 void main(void)11 {12 if (foo(1) == foo(2))13 {14 printf("right!\n");15 }16 return;17 } 最后结果为:right! 下面为执行过程中的汇编代码:16: if (foo(1) == foo(2))00401078 push 10040107A c... 阅读全文
posted @ 2011-08-31 21:48 子坞 阅读(282) 评论(0) 推荐(0) 编辑

摘要: 1 #include <stdio.h> 2 3 struct MyStruct 4 { 5 int a; 6 MyStruct(); 7 } 8 9 MyStruct::MyStruct()10 {11 a =10;12 }13 14 void main(void)15 {16 MyStruct test;17 printf("%d\n", test.a);18 } 最后结果是:10 另外,将上述代码修改如下: 1 #include <stdio.h> 2 3 struct MyStruct 4 { 5 int a:4; // 注意!!! 6 M. 阅读全文
posted @ 2011-08-31 21:24 子坞 阅读(1009) 评论(2) 推荐(0) 编辑

2011年8月30日

摘要: char *strtok(char *s, const char *delim);作用: 分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。说明: strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回下一个分割后的字符串指针。返回值: 从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。 所有del... 阅读全文
posted @ 2011-08-30 18:36 子坞 阅读(492) 评论(0) 推荐(0) 编辑