技术点滴(一)

1.printf返回值是输出的字符个数

 

2.“(LPSTR)(LPCSTR)(str)“这种做法非常容易导致系统崩溃!这种做法根本不是将   CString转化为char   *,而是将str指针指向一个CString的数据缓冲区,操作str等于会改变CString的变量,所以至少会出现以下两种严重错误: 

1.若str加长字符串的长度,会引起缓冲溢出,导致系统崩溃; 
2.CString有写引用机制(即多个CString初始公用一个内存,改写时再重新分配内存),而str改写CString时系统不会意识到要重新分配内存,所以你可能同时也会改变其他的变量! 
最规范的用法是:GetBuffer()。 
vc为CString提供GetBuffer自有它的道理,如果你想成为合格的程序员,就应该多花时间了解一些内部的机制,这也是那帮老外提倡的。

3.ANSI与ASCII 

n最初,Internet上只有一种字符集——ANSI的ASCII字符集(American Standard Code for Information Interchange, “美国信息交换标准码),它使用7 bits来表示一个字符,总共表示128个字符,后来IBM公司在此基础上进行了扩展,用8bit来表示一个字符,总共可以表示256个字符,充分利用了一个字节所能表达的最大信息 
nANSI字符集:ASCII字符集,以及由此派生并兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。 

UNICODE与UTF8,UTF16 

n由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符 
n标准的Unicode称为UTF-16(UTF:UCS Transformation Format )。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。(Unicode字符集有多种编码形式) 
例如“连通”两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90 
而其UTF-8编码为:E8 BF 9E E9 80 9A 


n当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码: 
检测文件头标识,提示用户选择,根据一定的规则猜测 
最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表: 
EF BB BF UTF-8 
FE FF UTF-16/UCS-2, little endian 
FF FE UTF-16/UCS-2, big endian 
FF FE 00 00 UTF-32/UCS-4, little endian. 
00 00 FE FF UTF-32/UCS-4, big-endian. 

WINCE下不支持两个钩子

C#取得当前路径    const String appDirName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);



_countof的用处是取得数组的元素个数,sizeof是数组大小

你可能感兴趣的:(技术点滴(一))