
编程乐园
dpfordor
这个作者很懒,什么都没留下…
展开
-
[C++ RFC] SMTP协议rfc821中文
1. 介绍 简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传 送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C 和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用 的术语。 SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了 进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络 的子网。理解到原创 2008-01-20 23:01:00 · 2339 阅读 · 0 评论 -
C++ VC Base64编解码算法系列三(解码算法)
int base64_decode(void *out_, const char *in, int maxlen) /* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */ /* maxlen limits output buffer size, set to zero to ignore */原创 2007-12-23 21:56:00 · 1063 阅读 · 1 评论 -
Python socket udp网络编程系列二(服户端)
from socket import *# Set the socket parametershost = "192.168.1.102"port = 3550buf = 1024addr = (host,port)# Create socket and bind to addressUDPSock = socket(AF_INET,SOCK_DGRAM)UDPSock.bind(addr原创 2007-12-23 20:57:00 · 1356 阅读 · 1 评论 -
C++ VC 开发3D风格按钮控件
主要是通过 OwnerDraw属性实现。1.运行AppWizard生成一个基于对话框的test工程,在对话框中加入一个CButton控件。在CButton控件的General属性页将控件的ID改为IDC_3DTEXTBTN,Caption改为“谁与争疯”,在控件Styles属性页选中OwnerDraw,其余设置保持默认。 2.用classwizard创建一个新类:C3dTextButton,基类为原创 2007-12-25 23:20:00 · 1333 阅读 · 0 评论 -
C++ python STL 整数划分递归算法(即一个数分为几个数的和)
def divide(m,r,out):#m:=max r:=remain if(r==0): return 1 m1=r while m1>0: if(m1 out.append(m1) if(divide(m1,r-m1,out)): print out out.pop() m1-=1 return 0n=6#out=[]divide(n-1,n,out=[])pr原创 2007-12-24 23:23:00 · 1448 阅读 · 0 评论 -
C++ 自然语言编码详解系列二(字符(串)的内存表示)
字符在内存中是怎样存储的 单字节字符串:每个字符占一个字节按顺序依次存储,最后以单字节表示的0结束。例如。"Bob"的存贮形式如下: 42 6F 62 00 B原创 2007-12-24 14:16:00 · 979 阅读 · 0 评论 -
C++ STL VC fread函数的陷阱
如果想实现从某个文件中一次次N个字节般读出来,那建议不要用 read = fread(buff,N,1,data_file); 因为就算当文件的字节数比N大,但这时strlen(buff)绝不是N个字节大小!!也不是read个字节大小!!查帮助文档,可知,read是指成功读入的单元块数,这里对应的就是,read要么是1,要么是0(由第三原创 2007-12-23 23:39:00 · 1285 阅读 · 1 评论 -
C++ VC strncat函数仿真
size_t strncat(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t n = siz; size_t dlen; /* Find the end of dst and adjust bytes left but dont go past end */原创 2007-12-23 22:23:00 · 904 阅读 · 0 评论 -
C++ VC strncasecmp函数仿真
int strncasecmp(char *s1, char *s2, register int n) { while (--n >= 0 && toupper((unsigned char)*s1) == toupper((unsigned char)*s2++)) if (*s1++ == /0) return 0; return(n }原创 2007-12-23 22:21:00 · 2429 阅读 · 0 评论 -
C++ VC strcasecmp函数仿真
int strcasecmp(char *s1, char *s2) { while (toupper((unsigned char)*s1) == toupper((unsigned char)*s2++)) if (*s1++ == /0) return 0; return(toupper((unsigned char)*s1) - toupper((unsigned char)*原创 2007-12-23 22:19:00 · 1372 阅读 · 0 评论 -
C++ VC strstr函数的仿真
char *strstr(register char *buf, register char *sub) { register char *bp; if (!*sub) return buf; for (;;) { if (!*buf) break; bp = buf; for (;;) { if (!*sub) return buf;原创 2007-12-23 22:13:00 · 986 阅读 · 0 评论 -
C++ VC Base64编解码算法系列二(编码算法)
void base64_encode(char *out, const void *in_, int inlen) /* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */ { const unsigned char *in = (const unsigned char *)in_; for (原创 2007-12-23 21:54:00 · 1169 阅读 · 0 评论 -
C++ VC Base64编解码算法系列一(基本数据定义)
static const char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";#define BAD -1static const char base64val[] = { BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD原创 2007-12-23 21:49:00 · 1394 阅读 · 0 评论 -
C++ 超强的URL解析算法
int parse_url(char *url, char **serverstrp, int *portp, char **pathstrp){ char buf[256]; int serverlen, numread=0; /* go through the url */ /* reset url to point PAST the http:// */ /* assume原创 2007-12-23 21:14:00 · 6827 阅读 · 0 评论 -
Python socket udp网络编程系列一(客户端)
from socket import *# Set the socket parametershost = "localhost"port = 21567buf = 1024addr = (host,port)# Create socketUDPSock = socket(AF_INET,SOCK_DGRAM)def_msg = "===Enter message to send to原创 2007-12-23 20:55:00 · 913 阅读 · 0 评论 -
C++ 自然语言编码详解系列一(字符编码基础)
三种编码类型 第一种编码类型是单字节字符集(single-byte character set or SBCS)。在这种编码模式下,所有的字符都只用一个字节表示。ASCII是SBCS。一个字节表示的0用来标志SBCS字符串的结束。 第二种编码模式是多字节字符集(multi-byte character set or MBCS)。一个MBCS编码包含一些一个字节长的字符,而另一些字符大于原创 2007-12-24 14:12:00 · 1040 阅读 · 0 评论 -
C++ 自然语言编码详解系列三(各种编码的统一)
存在着的各种编码,在编程实现时,如果不注意会得到不少麻烦;要小心注意的话,又会有点本末倒置不能专心于上层应用逻辑的开发,是不是就没有办法了? 就在这时候,TCHAR出现了,说白了就是,用一套宏定义来屏蔽语言间的差别,使用的时候只要以下原则,则保无忧: 1. 凡是字符串常量,加_T宏。即 "1232"--> _T("1232"); 2.凡定义字符原创 2007-12-24 14:39:00 · 2691 阅读 · 0 评论 -
[C++ RFC] POP协议rfc1939中文
1. 简介 对于在网络上的比较小的结点,支持消息传输系统(MTS)是不实际的。例如,一台工作站可能不具有充足的资源允许SMTP服务器和相当的本地邮件传送系统保持序驻留,并持续运行。同样的,将一台个人计算机长时间连接在IP类型网络上的费用也是可观的(结点缺少的资源被称为"联络性")。 虽然如此,在这样的小结点上允许管理邮件是十分有用的,并且这些结点经常支持一个用户代理来管理邮件。为解决这一问题原创 2008-01-20 22:52:00 · 1462 阅读 · 0 评论 -
[C++ VC MFC] char* str="heelo"与char str[]="heelo"区别
前者是指针,指向一个常量字符串的指针 后者是一个数组.... 大家都是在栈中分配空间 其实区别更在于,后者会有复制字符串的开销原创 2008-01-13 21:15:00 · 786 阅读 · 0 评论 -
[SQL] SQL注入
1.判断有无注入点; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等..and 0and 03.猜帐号数目 如果遇到0and 0and 14.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称.and 1=(select count(*) from admin where le转载 2008-01-11 12:57:00 · 865 阅读 · 0 评论 -
[C++ VC] iconv库的使用
GB2312字符串转换为UTF-8的字符串,代码如下:#include #include #include int main(void){ unsigned char *src = "魅影追击和歌姬"; /* 需转换的字串 */ unsigned char dst[256] = {0}; /* 转换后的内容 */ unsigned char buf[1024] = {0}; /*原创 2008-01-11 12:53:00 · 8457 阅读 · 3 评论 -
[C++ BCB] bcb线程
class TMyThread : public TThread{private: TEdit *edt; DWORD n;public: __fastcall TMyThread(TEdit *Edit) : TThread(false) { edt = Edit; n = Edit->Text.ToIntDef(0);转载 2008-01-10 18:42:00 · 1184 阅读 · 0 评论 -
[C++ VC MFC] MFC消息响应机制
所有MFC的窗口类都通过钩子函数_AfxCbtFilterHook截获消息,并且在钩子函数_AfxCbtFilterHook中把窗口过程设定为AfxWndProc。原来的窗口过程保存在成员变量m_pfnSuper中。----所以在MFC框架下,一般一个消息的处理过程是这样的。 函数AfxWndProc接收Windows操作系统发送的消息。 函数AfxWndProc调用原创 2008-01-10 09:01:00 · 1068 阅读 · 0 评论 -
[C++ VC MFC] VC常用数据类型使用转换
一、其它数据类型转换为字符串短整型(int) itoa(i,temp,10); //将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); //按二进制方式转换 长整型(long) ltoa(l,temp,10);二、从其它包含字符串的变量中获取指向该字符串的指针CString变量 st转载 2008-01-10 08:59:00 · 1150 阅读 · 0 评论 -
[C++ MFC VC] 虚函数表指针的位置
编译器会把一种叫虚指针(vptr)的隐藏数据插入到至少拥有一个虚函数的类中。 vptr 是一种指向虚函数地址列表的指针。在不同编译器中, vptr 所在位置是不同的。 一些编译器(例如:Visual C++ 和 C++ Builder)把 vptr 放置在类的开头部分,在所有用户声明的数据成员的前面。而另一些编译器,像GCC 和 DEC CXX,把 vptr 放在类的结尾部分,在所有用户声转载 2008-01-10 08:58:00 · 896 阅读 · 0 评论 -
[C++ VC MFC] Windows 的定时机制
方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置200ms的时间间隔。然后在应用程序中增加定时响应函数 OnTimer(),并在该函数中添加响应的处理语句,用来完成到达定时时间的操作。这种定时方法简单,但精度非常低,最小计时精度仅为30ms,CPU占用低,且定时器消息在多任务操作系统中的优转载 2008-01-10 08:56:00 · 975 阅读 · 0 评论 -
[C++ VC MFC]巧妙程序自删除
近日看到网友询问如何实现程序运行之后把自己删除的方法,不知大家对木马甚么的兴趣实在太浓,还是想要这样的效果:用户只要一运行程序,可执行文件就没有了,可是程序还是在跑,胆小的只怕要喊"鬼呀!","老婆,快出来看上帝"甚么的。其实最典型的用法是写反安装程序. 闲来无事,Bear掰到一种还算巧妙的“删除自己”的方法。 大家都知道,一般的程序运行的时候,可执行文件本身是被操作系统保护的,不能用改写转载 2008-01-10 08:55:00 · 3753 阅读 · 3 评论 -
C++ python STL 组合数递归算法(n个取m个数的组合数)
def c(n,m,out): if(m==0): return 1 x=n while x>=m: out.append(x) if(c(x-1,m-1,out)): print out out.pop() x-=1 return 0c(7,4,out=[])print out同理,用C++ STL的vector取代 out,即可易转成c++代码了~原创 2007-12-24 23:29:00 · 4172 阅读 · 1 评论 -
C++ 自然语言编码问题
一般地,两个字节为单位就可以表示任何语言,unicode就是这样做的。 汉字占两个字节,英文字母占一个字节,汉字的高位字节为负数 utf8编码中,一个字的字节可以是1,2,3个字节不等原创 2007-12-24 13:03:00 · 623 阅读 · 0 评论 -
C++ STL VC 最简单的按行读取文件方法
freopen("data.dat","r",stdin);while(fgets(buff,sizeof(buff),stdin)){ doanythingwith(buff);}原创 2007-12-23 23:48:00 · 2409 阅读 · 0 评论 -
C++ VC strncpy函数的仿真
size_t strncpy(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t n = siz; /* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { do { if原创 2007-12-23 22:16:00 · 948 阅读 · 0 评论 -
VC.net 开发环境介绍系列二(资源部分)
1. 编辑对话框时,选中一个控件,然后在属性子窗口中会列出它的所有的属性。按上面的闪电按钮,会列出它所有可用的事件,双击其中一个事件,就会跳转到相应的源文件中,这时你就可以为该控件的某一事件添加处理程序了。 2. 在使用MFC编程时,属性子窗口会显示这个类可用的重写函数和事件处理程序,双击就可以编写代码。如果发现属性子窗口和代码不对应,可以在类视图中选择你需要编辑的类,或在代码编辑原创 2007-12-22 14:13:00 · 701 阅读 · 0 评论 -
VC.net 开发环境介绍系列三(编译部分)
1. 如果一个很大的工程,需要包含大量的系统头文件,那么你可以把这些包含的头文件全部写到一个StdAfx.h的文件里,然后再建一个StdAfx.cpp,里面就一句代码,#include “StdAfx.h”,接着在解决方案管理器->你的工程上单击右键,然后按属性->配置属性->C/C++->预编译头,把创建/使用预编译头设为:创建预编译头,下面两向会自动填写,如果没有,那就填上原创 2007-12-22 14:11:00 · 748 阅读 · 0 评论 -
C++ STL 重载运算符小于号的巧妙
一天,无意中看到如下类定义: class Foo { int a1; int a2; //方案一 bool operator {原创 2007-12-21 23:00:00 · 25726 阅读 · 1 评论 -
如何快速判定一个数是否2的幂数
bool is2Power(int x){ return (!(x & (x-1)));}原创 2007-12-21 00:07:00 · 1080 阅读 · 1 评论 -
排序算法系列六(归并排序)
void mergeSort(int [] workspace , int lower, int upper){if( lower==upper ) { return ; } int mid=(lower+upper)/2; mergeSort(workspace,lower,mid); mergeSort(workspace,mid+1,upper);原创 2007-12-20 23:55:00 · 509 阅读 · 0 评论 -
排序算法系列五(二分插入排序)
for( int i=0;i { int k=a[i]; int l=0,r=i-1,j; while(l { j=(l+r)/2; if(a[j] r=j-1; else l=j+1; } for( j=i-1 ; j>=r+1 ; j-- ) a[j+1]=a[j]; a[r+1]=k; }原创 2007-12-20 23:49:00 · 592 阅读 · 0 评论 -
排序算法系列七(希尔排序也称shell排序)
int d,i,j,k; for( d=1;d for( ;d>0; ) { for( i=d;i { k=a[i]; for( j=i-d;j>=0 && k>a[j];j-=d ) a[j+d]=a[j]; a[j+d]=k; } d=(d-1)/3; }原创 2007-12-20 23:46:00 · 600 阅读 · 0 评论 -
[VC Bison] 超强的多功能计算器
caculator.y%{#include #include #include #include "calc.h"void yyerror(char* s){ fprintf(stderr, "%s/n", s);}%}%union {double val;symrec* tptr;}%token NUM%token VAR FNCT%type exp%right原创 2008-01-31 23:32:00 · 1329 阅读 · 0 评论 -
获得该下载文件的真实地址
获得真实地址很简单:在打开的网页中找到需要下载的程序或软件,然后按下Shift键再点击下载链接,IE浏览器会自动新建一个浏览器窗口来载入该链接,此时只要按下“停止”图标即可在IE地址栏中出现真实下载地址。原创 2008-01-23 23:17:00 · 6122 阅读 · 1 评论