自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

转载 Windows程序中的字符编码

<br />写这篇文章的起因是这么一个问题:我们在使用和安装Windows程序时,有时会看到以“2052”、“1033”这些数字为名的文件夹,这些数字似乎和字符集有关,但它们究竟是什么意思呢?<br /><br />研究这个问题的同时,又会遇到其它问题。我们会谈到Windows的内部架构、Win32 API的A/W函数、Locale、ANSI代码页、与字符编码有关的编译参数、MBCS和Unicode程序、资源和乱码等,一起经历这段琐碎细节为主,间或乐趣点缀的旅程。<br /><br />0 Where is

2010-07-15 17:09:00 3277 1

转载 Windows程序中的字符编码

<br />写这篇文章的起因是这么一个问题:我们在使用和安装Windows程序时,有时会看到以“2052”、“1033”这些数字为名的文件夹,这些数字似乎和字符集有关,但它们究竟是什么意思呢?<br /><br />研究这个问题的同时,又会遇到其它问题。我们会谈到Windows的内部架构、Win32 API的A/W函数、Locale、ANSI代码页、与字符编码有关的编译参数、MBCS和Unicode程序、资源和乱码等,一起经历这段琐碎细节为主,间或乐趣点缀的旅程。<br /><br />0 Where is

2010-07-15 17:09:00 1058

转载 字符,字节和编码

<br />字符,字节和编码 [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm] 级别:中级 摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。 掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的。因此,阅读本文时需要慢读多想,多思考。

2010-07-15 17:04:00 633

转载 彻底解密C++宽字符

<br />从字符到整数<br /><br />char是一种整数类型,这句话的含义是,char所能表示的字符在C/C++中都是整数类型。好,接下来,很多文章就会举出一个典型例子,比如,'a'的数值就是0x61。这种说法对吗?如果你细心的读过K&R和BS对于C和C++描述的原著,你就会马上反驳道,0x61只是'a'的ASCII值,并没有任何规定C/C++的char值必须对应ASCII。C/C++甚至没有规定char占几位,只是规定了sizeof(char)等于1。<br />当然,目前大部分情况下,char

2010-06-27 02:46:00 1671

原创 safe bool idiom

在阅读boost源代码,看到这个词,以前从来没有注意过,使用boost的时候也从来没有留意它,其实它包含了作者的深思熟虑呢。safe bool idiom的起源来自于这样子的一种用法:if( obj ) { ... },对于obj是built-in类型,那自然行得通,但是对于一个class或者struct就并不总是可以了。当然可以通过这样子的用法来代替:if( obj.is_valid() ){}

2010-03-21 08:20:00 1660

转载 c++异常机制

http://baiy.cn/doc/cpp/C++%E5%BC%82%E5%B8%B8%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F%E5%92%8C%E5%BC%80%E9%94%80%E5%88%86%E6%9E%90.htm

2009-09-16 14:39:00 670

转载 快速判断大小端

#include #include #include int main(int argc, char **argv){    int i = 1;    char *cp = (char *)&i;    if (*cp) //如果此时cp指向的内存为1的话,则为小端,否则为大端。        printf("Little Endian/n");    else         printf

2009-06-28 09:47:00 2076 1

转载 DLL的创建和使用

我们将创建的第一种类型的库是动态链接库 (DLL)。使用 DLL 是一种重用代码的绝佳方式。您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可。 本演练涵盖以下内容: 创建新的动态链接库 (DLL) 项目。 向动态链接库添加类。 创建引用动态链接库的应用程序。 在控制台应用程序中使用类库的功能。 运行应用程序。

2009-06-24 17:12:00 1582 1

转载 非阻塞socket编程

非阻塞 Socoket 编程在互联网相当普及的今天,在互联网上聊天对很多“网虫”来说已经是家常便饭了。聊天室程序可以说是网上最简单的多点通信程序。聊天室的实现方法有很多,但都是利用所谓的“多用户空间”来对信息进行交换,具有典型的多路I/O的架构。一个简单的聊天室, 从程序员的观点来看就是

2009-06-23 19:14:00 4695 2

转载 数组的引用

 "数组引用"以避免"数组降阶"(本文曾贴于VCKBASE/C++论坛)受[hpho]的一段模板函数的启发,特写此文,如有雷同,实在遗憾。数组降阶是个讨厌的事,这在C语言中是个无法解决的问题,先看一段代码,了解什么是"数组降阶"#include using namespace std;void Test( char array[20] ){    cout }int main(

2009-06-22 00:04:00 688 1

转载 字节对齐

朋友帖了如下一段代码:  #pragma pack(4)  class TestB  {  public:    int aa;    char a;    short b;    char c;  };  int nSize = sizeof(TestB);  这里nSize结果为12,在预料之中。  现在去掉第一个成员变量为如下代码:  #pragma pack(4)  class Tes

2009-06-18 10:57:00 655

转载 c语言中的offsetof()宏

offsetof  :    Retrieves the offset of a member from the beginning of its parent structure.size_t offsetof(structName, memberName);Parameters:    structName : Name of the parent data structure.   

2009-06-17 11:31:00 2872

转载 KMP

假如,A="abababaababacb",B="ababacb",我们来看看KMP是怎么工作的。我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符(j当然越大越好),现在需要检验A[i+1]和B[j+1]的关系。当A[i+1]=B[j+1]时,i和j

2009-06-16 12:54:00 762

转载 虚函数表

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多

2009-06-15 12:05:00 984 7

转载 左值和右值

左值性(lvalueness)在C/C++中是表达式的一个重要属性。只有通过一个左值表达式才能来引用及更改一个对象(object)的值。(某些情况下,右值表达式也能引用(refer)到某一个对象,并且可能间接修改该对象的值,后述)。   何谓对象?如果没有明确说明,这里说的对象,和狭义的类/对象(class/object)相比,更为广泛。在C/C++中,所谓的对象指的是执行环境中一块存储区域(a

2009-06-15 09:10:00 936

转载 sprintf函数

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argum

2009-06-14 01:59:00 511

转载 printf函数可变参数

摘要:一直以来都觉得printf似乎是c语言库中功能最强大的函数之一,不仅因为它能格式化输出,更在于它的参数个数没有限制,要几个就给几个,来者不拒。printf这种对参数个数和参数类型的强大适应性,让人产生了对它进行探索的浓厚兴趣。 关键字:printf, 可变参数 1. 使用情形 int a =10;double b = 20.0;char *str = "Hello wor

2009-06-09 15:37:00 777

转载 template友元的写法

#includeusing namespace std; templateclass test;templateostream& operator& src);templateclass test{T m;public:test(T i):m(i){}friend ostream& operator(ostream& os,const test& src);};templateos

2009-06-09 00:10:00 665

转载 覆盖,隐藏,重载

1. 重载、覆盖与隐藏  1).重载:成员函数具有以下的特征时发生"重载"  A.相同的范围(同一个类中)  B.函数的名字相同  C.参数类型不同(不能进行隐式类型转换)  D.Virtual关键字可有可无  2).覆盖(也叫"继承"):指派生类函数覆盖基类函数,特征是:  A.不同的范围(分别位于基类与派生类中)  B.函数名字相同  C.参数相同  D.基类函数必须有virtual关键字  

2009-06-07 15:07:00 894 3

转载 stream

C++文件流  在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:   1、插入器(  向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout  2、析取器(>>)   从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,c

2009-06-07 01:34:00 464

转载 线程同步互斥

当解决多线程互斥同步的问题时,经常会有如下几个问题:1. 在一个给定的问题中,需要多少个Mutex,多少个Semaphore?有什么规律?2. 在对临界区加锁和等待信号量的顺序上有什么要求和规律?3. 什么样操作适合放在临界区,什么样的不适合?下面就生产者和消费者问题来分析一些这几个问题.下面是一个简单的实现程序:生产者向数组sharedArray中写入数据,而消费者从该数组中读取数据.#incl

2009-06-05 11:59:00 480

转载 回调函数2

什么是回调函数?  回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编

2009-06-04 16:49:00 454

转载 函数指针与回调函数

程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论)。声明函数指针    回调函数是一个程序员不能显式调用的函数;通过将回调函数的地址传给调用者从而实现调用。要实现回调,必须首先定义函数指针。尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指

2009-06-04 16:32:00 542

转载 用户模式和内核模式

2009-06-03 23:39:00 491

转载 C++大数相乘

/*头函数 */#include#include#include#include#define max 10000/***************************************/int fmul(char s1[],char s2[]);/***************************************/char sum[max];char result

2009-06-03 09:34:00 580

转载 windows编程1

进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:• 一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。• 另一个是地址空间,它包含所有可执行模块或D L L模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。Windows支持两种类型的应用程序。一种是基于图形用户界面(GUI)的应用程序,另一种是基于控制台

2009-06-03 09:10:00 440

转载 malloc 和free的一些认识

malloc()以及free()的机制:   这个部分我今天才有了新的认识!而且是转折性的认识!所以,这部分可能会有更多一些认识上的错误!不对的地方请大家帮忙指出!   事实上,仔细看一下free()的函数原型,也许也会发现似乎很神奇,free()函数非常简单,只有一个参数,只要把指向申请空间的指针传递给free()中的参数就可以完成释放工作!这里要追踪到malloc()的申请问题了。

2009-06-01 10:29:00 500

转载 虚函数的 内存布局

典型地,C++通过虚函数实现多态性。多态性的定义:“无论发送消息的对象属于什么类,他们均发送具有相同形式的消息,对消息的处理方式可能随接受消息的对象而变。”具体地说,“在某个基类上建立起来的类的层次结构中,可以对任何一个派生类的对象中的同名成员函数进行调用,而被调用的成员变量所提供的处理可以随其所属的类而改变。”虚函数首先是一种成员函数,它可以在该类的派生类中被重新定义并被赋予另外一种处理功能。

2009-05-30 19:55:00 1237

转载 stringstream的用法

stringstream通常是用来做数据转换的。相比c库的转换,它更加安全,自动和直接。 例子一:基本数据类型转换例子 int转string #include #include #include  int main(){    std::stringstream stream;    std::string result;    int i = 1000;    strea

2009-05-30 04:32:00 723

转载 进程间通讯方法

VC++中进程间相互通信的十一种方法 进程通常被定义为一个正在运行的程序的实例,它由两个部分组成:   一个是操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方   另一个是地址空间,它包含所有的可执行模块或DLL模块的代码和数据。它还包含动态分配的空间。如线程堆栈和堆分配空间。每个进程被赋予它自己的虚拟地址空间,当进程中的一个线程正在运行时,该线程可以访问只属于它的

2009-05-27 12:57:00 807

转载 va_list、va_start、va_arg、va_end的原理与使用

概述由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论. 定义大家先看几宏.在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义:#define _INTSIZEOF(n)   ((sizeof(n)+si

2009-05-27 05:13:00 502

转载 static关键字

C/C++中的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类的问题。 A.      面向过程程序设计中的static关键字1)      静态全局变量         在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。静态全局变量定义和使用类似:         #incl

2009-05-26 00:54:00 570 1

转载 可变参数va_start,va_arg,va_end的用法

一)写一个简单的可变参数的C函数 下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的 C函数要在程序中用到以下这些宏: void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); va_list:用来保存宏va_sta

2009-05-25 16:25:00 7099 1

转载 vc中的debug与release的区别

VC下Debug和Release区别最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到问题所在处,才发现原来是给定的一个数组未初始化,导致后面处理异常。网上查找了些资料,在这 罗列汇总下,做为备忘~ 一、Debug 和 Release 的区别         Debug 通常称

2009-05-24 23:14:00 991

转载 C++中的迷惑

很多人抱怨C++有太多隐晦语法的问题。今天,来谈两个隐晦的语法问题。 一,关于Declarator。有时候,我们会故意制造一个便于理解的编译错误。templateclass static_error{public:    template static_error(T){}};templateclass static_error{    class Static_Check_Error{}

2009-05-21 21:05:00 936

转载 volatile和原子操作

所谓原子操作,就是"不可中断的一个或一系列操作" , 在确认一个操作是原子的情况下,多线程环境里面,我们可以避免仅仅为保护这个操作在外围加上性能昂贵的锁,甚至借助于原子操作,我们可以实现互斥锁。很多操作系统都为int类型提供了+-赋值的原子操作版本,比如 NT 提供了 InterlockedExchange 等API, Linux/UNIX也提供了atomic_set 等函数。 前两天有同

2009-05-20 17:19:00 5331 2

转载 const 用法

const用法详解 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也是很耀眼的 就const直接可以取代c中的#define 以下几点很重要,学不好后果也也很严重 const 1. 限定符声明变量只能被读   const int i=5;   int j=0;   ...   i=j;  //非法,导致编译错误   j=i;  //合法 2. 必须初始化   const in

2009-05-20 10:22:00 575

转载 虚函数

C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多

2009-05-19 12:42:00 967

转载 string 中英文字符

C++的中英文字符串表示(string,wstring)       在C++中字符串类的string的模板原型是basic_string Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->template class

2009-05-15 11:52:00 3375

转载 slab alloc内存分配机制

slab的“对象重用”                                       到目前为止,SUN于1991年发明的Slab Allocator是各种OS内核Memory Allocator中被认为整体性能最好的。它有几个措施来促进内存分配性能的提高,其中之一就是"对象重用"。原理OS可以使用Slab提供通用内存块的申请与释放;所谓通用内存块指的是可以被用于非特

2009-05-15 10:10:00 4541

lua文件

自己测试使用的脚本以免遗忘,对其他坛友没有用

2015-07-23

空空如也

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

TA关注的人

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