摘要:
十六进制十进制字符十六进制十进制字符十六进制十进制字符十六进制十进制字符00NUL2032空格 4064@6096`11SOH2133!4165A6197a22STX2234"4266B6298b33ETX2335#4367C6399c44EOF2436$4468D64100d55ENQ2537%4569E65101e66ACK2638&4670F66102f77BEL2739'4771G67103g88BS2840(4872H68104h99HT2941)4973I69105iA10LF2A42*4A74J6A106jB11VT2B43+4B75K6B107kC12 阅读全文
摘要:
æ 退格 TAB 换行 回车 空格 ! " # $ % & ' ( ) * + , - . /%00 %01 %02 %03 %04 %05 %06 %07 %08 %09 %0a %0b %0c %0d %0e %0f %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %1a %1b %1c %1d %1e %1f %20 %21 %22 %23 %24 %25 %26 %27 %28 %29 %2a %2b %2c %2d %2e %2f0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B 阅读全文
摘要:
UrlEscape is used to converts characters in a URL that might be altered during transport across the Internet ("unsafe" characters) into their corresponding escape sequences.For the purposes of this document, a typical URL is divided into three sections: the server, the segment, and the que 阅读全文
摘要:
去年9月,twitter改版。一个显著变化,就是URL加入了"#!"符号。比如,改版前的用户主页网址为 http://twitter.com/username改版后,就变成了 http://twitter.com/#!/username在我印象中,这是主流网站第一次将"#"大规模用于直接与用户交互的关键URL中。这表明井号(Hash)的作用正在被重新认识。本文根据HttpWatch的文章,整理与井号有关的所有重要知识点。一、#的涵义#代表网页中的一个位置。其右面的字符,就是该位置的标识符。比如, http://www.example.com/index. 阅读全文
摘要:
1.MIME主要使用两种编码转换方式——Quoted-printable和Base64——将8位的非英语字符转化为7位的ASCII字符。虽然这样的初衷,是为了满足电子邮件中不能直接使用非ASCII码字符的规定,但是也有其他重要的意义:a)所有的二进制文件,都可以因此转化为可打印的文本编码,使用文本软件进行编辑;b)能够对文本进行简单的加密。2.首先,简单介绍一下Quoted-printable编码转换方式。它主要用于ACSII文本中夹杂少量非ASCII码字符的情况,不适合于转换纯二进制文件。它规定将每一个8位的字节,转换为3个字符。第一个字符是“=”号,这是固定不变的。后面二个字符是二个十六进 阅读全文
摘要:
一、问题的由来一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址“http://www.abc.com”,但是没有希腊字母的网址“http://www.aβγ.com”(读作阿尔法-贝塔-伽玛.com)。这是因为网络标准RFC 1738做了硬性规定:"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved charac 阅读全文
摘要:
字节和字符的区别字节和字符能有什么区别?不都是一样的吗?完全正确,但只是在古老的DOS时代。当Unicode出现后,字节和字符就不一样了。字节(octet)是一个八位的存储单元,取值范围0~255。而字符(character,或者word)为语言意义上的符号,范围就不一定了。例如在UCS-2中定义的字符范围为0~65535,它的一个字符占用两个字节。Big Endian和Little Endian上面提到了一个字符可能占用多个字节,那么这多个字节在计算机中如何存储呢?比如字符0xabcd,它的存储格式到底是 AB CD,还是 CD AB 呢?实际上两者都有可能,并分别有不同的名字。如果存储为 阅读全文
摘要:
ASCII字符集编码ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。GB2312字符集编码GB2312 是汉字字符集和编码的代号,中文全称为“信息交换用汉字编码字符集”,由中华人民共和国国家标准总局发布,一九八一年五月一日实施。GB 是“国标” 二 阅读全文
摘要:
Unicode是一个字符集,而UTF-8是 Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1 个字节。Unicode为双字节,而UTF-8中汉字占三个字节。 UTF-8编码字符理论上可以最多到6个字节长,然而16位BMP(Basic Multilingual Plane)字符最多只用到3字节长。下面看一下UTF-8编码表: U-00000000 - U-0000007F: 0xxxxxxx U-00000080 - U-000007FF: 110xxxxx 10xxxxxx U-00000800 - 阅读全文
摘要:
摘要本文分析了Windows环境使用MFC调试内存泄露的技术,介绍了在Windows环境下用VC++查找,定位和消除内存泄露的方法技巧。关键词:VC++;CRT 调试堆函数;试探法。编译环境VC++6.0技术原理检测内存泄漏的主要工具是调试器和 CRT 调试堆函数。若要启用调试堆函数,请在程序中包括以下语句: #define CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>注意 #include 语句必须采用上文所示顺序。如果更改了顺序,所使用的函数可能无法正确工作。 通过包括 crtdbg.h,将 mallo 阅读全文
摘要:
检测内存泄漏的基本工具是调试器和 CRT 调试堆函数。为了使用调试堆函数,必须在要检测内存泄漏和调试的程序中添加下面的语句:#define _CRTDBG_MAP_ALLOC #include<stdlib.h> #include<crtdbg.h> #include "debug_new.h" MSDN 如是说:“必须保证上面声明的顺序,如果改变了顺序,可能不能正常工作。”至于这是为什么,我们不得而知。MS 的老大们经常这样故弄玄虚。 针对非 MFC 程序,再加上周星星的头文件:(1)debug_new.h,当然如果不加这一句,也能检测出内存泄漏, 阅读全文
摘要:
摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正。 控件通知消息 在《深度解析VC中的消息(上)》中,我们提到了消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。 控件通知消息,是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及Windows公共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本、操作控件的滚动条都会产生通知消息。 阅读全文
摘要:
学习windows 编程从mfc角度来说可分为两部分那就是WinMain函数以前的,和WinMain函 数以后的。前者涉及很多windows操作系统内部的知识,后者么看mfc源码就可以了。虽然大 多数程序不需要你了解太多关于os加载应用程序这方面的知识,但我认为能较深入了解wind ows os的运行情况对程序员是很有帮助的。 最近我正在研究一个microsoft的.exe程序的启动过程,这也是以上所说的关于os如何加 载程序的知识,它包括进程创建,主线程 创建,PE文件加载,程序c运行时启动函数以及四种 main函数的调用等许多令我不得不静下心来好好思索的东东。从mfc编程角度来说,这些都是 阅读全文
摘要:
Visual Assist X是VC必备的插件,它将成倍提高编辑效率。下面简单介绍一下它的模板功能。安装好Visual Assist X后,打开Visual Assist X Options对话框,如图:选择Autotext/Templates, 里面显示了当前定义的模板。以struct为例:struct:struct ?{};FF第一行的"struct: "表示为struct定义的模板,当输入struct时会显示下面的struct ?{};这里的"?"表示自动输入这些字符后光标所停的位置。模板以FF字样结束。注意:这里的FF与"?" 阅读全文
摘要:
Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是 基于ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而 Release版本需要MFC42.DLL支持。Release Build不对源代码进行调试,不考虑MFC的诊断宏,使用的是MFC Release库,编译十对应用程序的速度进行优化,而Debug Build则正好相反,它允许对源代码进行调试,可以定义和使用MFC的诊断宏,采用MFC Debug库,对速度没有优化。 阅读全文
摘要:
用Vc6编写的程序有时候Debug版本好好的,Release版本运行就出错,很多人都遇到过这种问题。前几天又有人问起,于是找了点时间写下这篇东西。总结了一部分Debug版本和Release版本的区别,都是些个人理解,欢迎交流。 Debug版本和Release版本之所以有区别,就是在于各自的编译项不同。不同的编译项组合产生不同的代码,Debug版本的编译项屏蔽了编译器的优 化,增加了调试信息的输出。也就是说,可以通过修改编译项的组合,使得优化过的版本也包含调试信息。于是调试Release版本成为了可能。那就先说说调 试方面Debug做的工作。 提起Vc6的调试,不能不提的就是它的PDB(Prog 阅读全文
摘要:
设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。为了增加调试信息,可以按照下述步骤进行: 打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开) 选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试 阅读全文
摘要:
1.概论运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个时期的C运行时库都是单线程的。随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量 (例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不 到正确的错误信息。因此,Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序 阅读全文
摘要:
1、Run-Time LibraryRun-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。 我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。 C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。 C Run-Time Libraries有静态库版本,也有动态链接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。 可以在"project"-"settin 阅读全文
摘要:
C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话。在 C/C++ 应用程序开发过程中,动态分配的内存处理不当是最常见的问题。其中,最难捉摸也最难检测的错误之一就是内存泄漏,即未能正确释放以前分配的内存的错误。偶尔发生的少量内存泄漏可能不会引起我们的注意,但泄漏大量内存的程序或泄漏日益增多的程序可能会表现出各种 各样的征兆:从性能不良(并且逐渐降低)到内存完全耗尽。更糟的是,泄漏的程序可能会用掉太多内存,导致另外一个程序垮掉,而使用户无从查找问题的真正根源。此外,即使无害的内存泄漏也可能 阅读全文