摘要: 上一篇博客中描述了如何用NotePad++来实现Unicode ANSI之间的转换,这一篇中,我们将学习使用封装后的方法 U2A和A2U 来实现,具体代码如下: 1 #ifndef UNICODEANSI_H_ 2 #define UNICODEANSI_H_ 3 4 #define CP_JP 932 5 #define CP_CH 936 6 #define CP_KO 949 7 #define CP_RU 1251 8 #define CP_EU 1252 // ENGLISH, FRENCH, GERMAN, ITALIAN, PORTUGUESE, SPANISH 9... 阅读全文
posted @ 2013-04-02 14:35 nchxmoon 阅读(822) 评论(0) 推荐(0) 编辑
摘要: 今天碰到一个关于UNICODE和ANSI相互转换的问题,作为一个程序员,我首先想到的是用WideCharToMultiByte/MultiByteToWideChar实现,这个我想大家都会了,我也会在后续博客中介绍如何使用。本博客主要是介绍如何通过NotePad++工具来实现的,NotePad++功能比NotePad强大很多,这我也不赘述了。转入正题吧...... UNICODE 转 ANSI (以中文为例,其他语言设置看最后附录): 首先,用NotePad++打开一个ANSI编码的文件(PS:如何创建ANSI文件,直接创建一个txt文件,默认的编码就是ANSI;或者将现有文件另存... 阅读全文
posted @ 2013-04-02 11:39 nchxmoon 阅读(50584) 评论(0) 推荐(0) 编辑
摘要: Most of time, we will write some common code for MFC and Win32 applications, such as convert operations(char, string, CString, int... convertion). So the code should support MFC and Win32 features. In this article, I will give you an example about how to use MFC features in Win32 application. First. 阅读全文
posted @ 2013-03-27 10:54 nchxmoon 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 题目要求:编写一个程序,无论是对于允许嵌套注释,还是不允许嵌套注释的程序,都能正常运行,但是产生的结果不一样。提示:在/**/之间,双引号“是注释的一部分;在双引号”“之间,/**/又是字符串。以下参考答案摘录自《C陷阱与缺陷》:对于/*/**/"*/"/*"/**/,支持嵌套返回 ”*/“(去除前后的两个注释),不支持返回 ”/*“(根据最近匹配原则);对于/*/*/0*/**/1,支持嵌套返回 1(去掉前面的两个注释),不支持返回 0*1,即0(去掉前后的两个注释)。 阅读全文
posted @ 2013-03-22 16:57 nchxmoon 阅读(477) 评论(0) 推荐(0) 编辑
摘要: /*** 获取制定范围的随机数.** 数据范围:uiStart~uiEnd (uiStart > uiEnd),随机数包括uiStart, uiEnd的取值.*/ 1 // GetRand from uiStart to uiEnd. 2 typedef unsigned int UINT; 3 UINT GetRand(UINT uiStart, UINT uiEnd) 4 { 5 if(uiStart > uiEnd) 6 { 7 cout<<"uiStart have to less than uiEnd."<<endl; 8 re 阅读全文
posted @ 2013-03-21 17:07 nchxmoon 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 1 // Swap 2 void Swap(int* a, int* b) 3 { 4 int tmp = *a; 5 *a = *b; 6 *b = tmp; 7 } 8 9 // GCD: Greatest Common Divisor10 int GCD(int i, int j)11 {12 if(i < 0 || j < 0)13 return 0;14 15 if(i < j)16 Swap(&i, &j); // Make sure i > j.17 18 if(j == 0) return i;19 20 ... 阅读全文
posted @ 2013-03-21 15:45 nchxmoon 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 1. 打开反汇编窗口:调试模式下,按Ctrl+F11。2. 术语: 2.1 ESP(Extended Stack Pointer): 堆栈指针,寄存器存放当前线程的栈顶指针; i.e: move ebp, esp -- 用ebp保存当前栈指针; 2.2 EBP(Extended Base Pointer): 基址指针,寄存器存放当前线程的栈底指针; i.e: push ebp -- 将基址指针压入栈; 2.3 EIP:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完成当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行; 2.4 EAX:累加器(Accumu... 阅读全文
posted @ 2013-03-20 15:16 nchxmoon 阅读(8891) 评论(0) 推荐(0) 编辑
摘要: 存贮属性:C指针有三种存贮属性,分别是:near (近)指针:16位段内偏移地址 far(远)指针:16位段地址+16位段内偏移地址 huge(巨)指针:32位规格化的具有唯一性的内存地址C语言的存贮属性由六种编译模式决定(参见TC集成环境菜单中的option->compiler->model选项),默认的编译模式为small, 在该编译模式下,指针的默认属性为near。 函数也是这个道理 阅读全文
posted @ 2013-02-20 10:34 nchxmoon 阅读(526) 评论(0) 推荐(0) 编辑
摘要: 所谓函数指针,就是指向函数的指针。函数和变量一样,存储在程序内存,如果知道函数的起始地址,就可以调用相应的函数。这就是函数指针的基本原理,通过一个指针来指向函数的存储地址,然后通过该指针来操作函数。关于函数指针的简介,网上都可以搜到一箩筐,我想用一个简单的例子来讲述函数指针的用法。如下:1. 申明一个函数指针FP,指向int Test(int, int);的函数;2. 可以在别的函数中,通过FP来调用int Test(int, int);函数;typedef int(*FP)(int, int);int Max1(int x, int y){ return x > y ? x : y;} 阅读全文
posted @ 2013-02-18 13:28 nchxmoon 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 这是C++的规则const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall而类中的static函数本质上是全局函数,调用规约是__cdecl或__stdcall,不能用const来修饰它.但是static 的数据成员可以声明为const. 阅读全文
posted @ 2013-02-18 10:05 nchxmoon 阅读(714) 评论(0) 推荐(0) 编辑