忆往昔, 项羽不过江. 江东好风光! 今振臂一呼,率甲三千, 试问天!
  •  
  •  
  • 首页
  •  
  •  

数据统计

正在加载数据...

日历

 

我的日志

发表新日志

标题 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 选择自 fmddlmyy 的 Blog 
关键字 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 

这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题: 

问题一: 
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢? 

我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢? 

问题二: 
最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-1...

点击此处查看原文


花了很长时间终于把排序的基础学了一下,这段时间学了很多东西,总结一下:
学的排序算法有:插入排序,合并排序,冒泡排序,选择排序,希尔排序,堆排序,快速排序,计数排序,基数排序,桶排序(没有实现)。比较一下学习后的心得。
我不是很清楚他们的时间复杂度,也真的不知道他们到底谁快谁慢,因为书上的推导我确实只是小小了解,并没有消化。也没有完全理解他们的精髓,所以又什么错误的还需要高手指点。呵呵。
1.普及一下排序稳定,所谓排序稳定就是指:如果两个数相同,对他们进行的排序结果为他们的相对顺序不变。例如A={1,2,1,2,1}这里排序之后是A = {1,1,1,2,2} 稳定就是排序后第一个1就是排序前的第一个1,第二个1就是排序前第二个1,第三个1就是排序前的第三个1。同理2也是一样。这里用颜色标明了。不稳定呢就是他们的顺序不应和开始顺序一致。也就是可能会是A={1,1,1,2,2}这样的结果。
2.普及一下原地排序:原地排序就是指不申请多余的空间来进行的排序,就是在原来的排序数据中比较和交换的排序。例如快速排序,堆排序等都是原地排序,合并排序,计数排序等不是原地排序...

点击此处查看原文


其实我之前用的比较多的是VisualStudio6,到后来2003,2005基本上就没怎么用过。2008也只是听过没见过,这几天在公司,因为要求,全部换成2010,起初我还在想,不知道改进在哪,不过当我正儿八经的用的时候,却发现这个开发环境里有许许多多新的吸引人的特性。我比较喜欢插件制的软件,而visual studio 2010里面有许许多多的插件可供选择,无论是免费的,还是收费的,装起来也很方便。所以说,这是一个好的开端,再者,2010中对STL等的支持将更加完善,而不是像6.0中那样总是许多莫名其妙的东西。


标题 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 
关键字 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 

这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题: 

问题一: 
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢? 

我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢? 

问题二: 
最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF-8这三种编码方式的相互转换。...

点击此处查看原文


2010
11-08

惭愧啊,虽然玩C++也有好长时间了,但是,对于在windows平台下面的一些类库和概念却知之甚少。今天有同事在问到WTL的时候,我才明白原来这个东西我还没有接触过。现在恶补一下,那就先从了解开始吧。  WTL是个很奇特的东西,它由微软公司一群热情的程序员维护,它从未出现在微软的官方产品名单上,但可以从微软的官方网站下载最新的WTL。它没有正式的文档支持,用WTL做关键字在MSDN中检索只能得到0个结果,但是全世界的开发网站上都有针对WTL的讨论组和邮件列表,任何问题都会得到热情的解答。(from:http://www.yesky.com/zhuanti/302/1927802.shtml)


setjmp()和longjmp().使用setjmp()可以在程序中保存一个已知的无错误状态,一旦发生错误,就可以通过longjmp()返回到该状态。示例:


c++抛出异常示例:


一个try...catch示例:


开发过程中,模块化是必不可少的部分。BCB做dll文件非常方便,不过有个问题浪费了我好长时间,这里说一下。dll是用bcb做的,因为要用到界面上的东西,所以选择了VCL支持。
在主模块中调用.dll时,老是出现一个错误提示:[Linker Error] Unresolved external  referenced from,该调的地方都调了呀,可是就是找不到原因。


CMYK模式属于印刷模式,而RGB属于光的三原色。CMYK采用减色法,而RGB采用加色法,网上流传的一些转换算法,在photoshop里面 打开之后发现颜色误差很大。

1).这是CMYK的色彩表:http://www.december.com/html/spec/colorcmyk.html

2).对于BCB或是delphi,可以考虑采用GraphicEx,安装方法如下:

create new package.
Example GraphEx.dpk
requires
rtl,
vcl,
vcljpg;
contains
MZLib in 'MZLib.pas',
GraphicCompression in 'GraphicCompression.pas',
GraphicEx in 'GraphicEx.pas',
GraphicStrings in 'GraphicStrings.pas',
JPG in 'JPG.pas',
Graph...

点击此处查看原文


先附个例子:

#i nclude %26lt;iostream.h%26gt;
#i nclude %26lt;windows.h%26gt;
//#i nclude "../../../include/MD_File.h"
#i nclude "MD_File.h"

void main()
{
CMD_File file;
file.EnableErrMSG(true); // 当发生错误时弹出对话框

char fn[255],pwd[255]={0};
// 读文件实例
cout%26lt;%26lt;"请输入要读取的epk文件包的文件名:";
cin%26gt;%26gt;fn;
cout%26lt;%26lt;"请输入要读取的epk文件包的密码:";
cin%26gt;%26gt;pwd;
//open原形bool Open(char* FileName,bool bReadOnly=true,bool bPacked=f...

点击此处查看原文


最近有不少朋友写信问我:“如何才能在VC中读取INI文件呢?有没有什么通用的类或者是API?”。实际上这个问题以前也一直困扰着我,我在VC中也找不到这方面的类或API。虽然听说DELPHI里有,但是我又只用VC,没有办法,只好自己动手写了一个专门用来处理INI文件的类——CIni;

  这个类是在去年写的,经过这一年多的实际运用发现效果还算不错,正好最近又有朋友问我这方面的问题,所以我就把它稍微整理了一下,然后作成通用的接口放到网上来给那些需要的朋友们。其实只有两个文件——"Ini.cpp"和"Ini.h",用的时候把这两个文件加入到你自己的工程中,然后在需要读取INI的地方#i nclude "ini.h" 即可使用这个类了,主要有下面4个用法:

  int ReadInt(char* index, char* name);       // 在[index]下面读名为 "name" 的一个整数
  char *ReadText(char* index, char* name);    // 在[index]下面读名为 "nam...

点击此处查看原文


先用GetLogicalDriveStrings取得目前電腦上的所有磁碟機代號,再用GetDriveType檢查何者為光碟機。

GetLogicalDriveStrings(
  DWORD nBufferLength, //字串(lpBuffer)長度
  LPTSTR lpBuffer); //字串指標

UINT GetDriveType(
  LPCTSTR lpRootPathName) //磁碟機代碼字串例如a:\

GetDriveType的傳回值意義如下:
0 代表無法判定指定的磁碟機型態
1 代表找不到指定的磁碟機
DRIVE_REMOVABLE 軟碟機
DRIVE_FIXED 硬碟機
DRIVE_REMOTE 網路磁碟機
DRIVE_CDROM 光碟機
DRIVE_RAMDISK 記憶體磁碟機

由GetLigicalDriveStrings()傳回的字串中,字元的排列方式為 [磁碟機代號]+[:]+[\]+零字元,例如a:\後面有...

点击此处查看原文


我们在市场上买了一个游戏,很少会轻易的看到游戏目录里一堆的BMP,PCX资源图片。难道他们不使用BMP之类的文件作为图片资源吗?非也,其实他们把这些资源图片进行了打包、压缩。

  举几个游戏的例子吧,大名鼎鼎westernwood的《红色警戒》的.mix文件就是一种压缩包,里面包含了一堆堆的游戏图片,声音等资源。还有blizzard的《星际争霸》、《暗黑破坏神》、《魔兽系列》的.mpq文件也是一种压缩包,里面包含了各种游戏使用的资源。几乎所有的游戏都用到了压缩包。

  那么为什么要使用这种压缩包呢?原因很多,首先就是压缩,游戏中使用的图片等资源都是极其适合压缩的,这样就减小了游戏的体积。如果把《红色警戒2》的资源全部解开相信会超过3G。其次压缩后文件体积的减小会带来读盘速度的显著提高。通常一个2M的BMP文件可以被压缩到700K以内,读取一个2M的文件和读取一个700K的文件然后再内存中解压的速度对比是可想而知的。最后,将大量的资源文件打包能使得游戏目录清晰,而不是一堆堆的文件夹和文件,这样能减少磁盘空间的浪费,也减少了磁盘碎片。<...

点击此处查看原文


//读取文件中每一行的前四个字符
//memcpy与strncpy的功能差不多一样
//要调用上面两个函数要先引入库string.h
//使用malloc要调用stdlib.h库
#i nclude %26lt;stdio.h%26gt;
#i nclude %26lt;stdlib.h%26gt;
#i nclude %26lt;string.h%26gt;
int main()
{
char *sfrom="1234567890";
char *sto=(char*) malloc(10);
memcpy(sto,sfrom,3);
printf(sto);
strncpy(sto,sfrom,3);
printf("\n");
printf(sto);
printf("\n");

FILE *fp=fopen("du.txt","r");
char ln[100];
char *out=(char*) malloc(10...

点击此处查看原文


test.ini

dbsybase
ip=192.168.1.4
dbname=sa
dbpassword=test

--------------------------------
testini.c

#i nclude %26lt;string.h%26gt;;
#i nclude %26lt;stdio.h%26gt;;
#i nclude %26lt;stdlib.h%26gt;;
int main(int argv,char **argc)
{
FILE *ini;
char *name,*value,line[100];
if(argv!=2)
{
printf("Usage:%s *.ini\n",argc[0]);
exit(1);
}
ini=fopen(argc[1],"r");
while(!feof(ini))
{
fgets(line,1024,ini); <...

点击此处查看原文


pelles C目前最新版本是4.0,用户可在http://www.smorgasbordet.com/pellesc/index.htm网址进行最新版本下?
载.这是一个基于LCC的免费编译器.功能强大,速度极快.我试了一下,相比gcc要快得多.而且可定制比较方便.此
外,还支持插件化.一般可以制作win32及控制台应用程序,而且可以导入vc或嵌入式vc程序.此外,还可以制作
pocket pc及wince应用程序,功能可谓相当强大,比dev c++有过之而无不及.而且支持各种资源的编辑,如对话框,
菜单,图标等.软件短小精悍,却功能非凡.而且与vc有异曲同工之妙.强烈推荐.

Pelles C for Windows is a complete development kit for Windows and Pocket PC. It contains among other things an optimizing C compiler, a linker, a resource compiler, a message com...

点击此处查看原文


//用zlib实现压缩与解压缩
//在winxpsp2+devc++4.9.9.2实现
//链接参数中加入-lz
//将zlib1.dll加入程序目录
//kzip功能是压缩文件,kunzip是解压缩文件
//仅限于对单个文件的压缩与解压缩
#i nclude %26lt;cstdlib%26gt;
#i nclude %26lt;iostream%26gt;
#i nclude %26lt;zlib.h%26gt;
#i nclude %26lt;stdlib.h%26gt;

using namespace std;
void kzip(char *inFile,char *outFile)
{
FILE *FileIn=fopen(inFile,"rb");
FILE *FileOut=fopen(outFile,"wb");
fseek(FileIn,0,SEEK_END);
unsigned long FileInSize=ftell(FileIn...

点击此处查看原文


摘自:http://www.gamedev.net/reference/articles/article2279.asp Part One - Compression

This Sweet Snippet will show you how easy it can be to perform. compression/decompression between data buffers in memory using the zlib library. We will go the easy route to get a simple example application going which will read in the contents of a file into memory, compress that data, and then write it back out to file. In the second part we will use the output from part one to decompress the data, t...

点击此处查看原文


所谓“文件”是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来。从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。

  普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件、目标文件、可执行程序; 也可以是一组待输入处理的原始数据,或者是一组输出的结果。对于源文件、目标文件、 可执行程序可以称作程序文件,对输入输出数据可称作数据文件。

  设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。在操作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。 通常把显示器定义为标准输出文件, 一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的printf,putchar 函数就是这类输出。键盘通常被指定标准的输入文件, 从键盘上输入就意味着从标准输入文件上输入数据...

点击此处查看原文