今天领导没去,老激动了,跟我旁边的叼丝大哥扯了一天蛋,解了俩bug就匆匆回家吃饭饭了,奶奶个锤子的,程序里竟然还有20年前写的代码,让我不胜感慨自己那个年轻哟。
第二章其实也比较简单,就是要记得东西比较多,我建议就是先记住主要的,能立即马上现在就用的,不然几十个名称记忆,会忘记很快,记住主要的,其他的以后见到用到,一看,靠!丫都长得差不多,就都记住了。
第二章的内容主要可以分为三部分,第一,为啥有了ASCii还要整个UNICODE。第二,windows编程中字符(ASCii和UNICODE)类型的定义,第三,常见的一些通用函数( ASCii和UNICODE类型都能处理的 )
第一,为啥有了ASCii还要整个UNICODE。
他娘的,天朝威武,那么多字,ASCii只用7位标识,装不开啊,记住是7位!,一个字节有8位,但ASCii只用7位,最高的那个位永远是0,当然说天朝有点目光短浅了,但说白了,他娘的就是美国鬼子设计的时候鼠目寸光,只考虑了自己国家的,只想省兜里那几分钱了,所以就有了UNICODE,UNICODE用16位,所以几乎能涵盖全宇宙最常用的字符,包括火星文。
第二,windows编程中字符(ASCii和UNICODE)类型的定义。
对不起兄弟姐妹们,标题没表达简洁,说白了就是与字符相关的类型定义,拿c语言来说,定义字符类型用啥?char! 卧槽,答对了,由char又引申出来char[],char*,差不多就这些锤子。但是我们现在在学的是windows编程,windows编程有自己的字符定义方式,但三种类型是与上面差不多的,这就好记了,来个对应就行了。
C语言: char char[] char*
windows 8位(ASCii): CHAR CHAR[] (PCHAR, PSTR, LPSTR)
windows 16位(UNICODE): WCHAR WCHAR[] (PWCHAR, PWSTR, LPWSTR)
关于char* 我只列出了3个,先记住这三个就够了,
如果是 ------> const char* ,
那对应的就是---> ASCii(PCCHAR, PCSTR, LPCSTR)
UNICODE( PCWSTR, LPCWSTR)
在中间加了一个C而已,擦,看清楚了,没有PWCCHAR这个玩意。
到这里了,就能想到,你说一个狗日的码农,写个程序又要考虑ASCII字符集,又要考虑UNICODE的,太他娘的蛋疼了,所以微软的包子们弄了一些通用的,这就简单了,就是用PTCHAR/ PTSTR/ LPTSTR,大家不要搞糊涂了,其实这三个是一样的类型,只是长的不一样,可能又觉得废柴,明明一样,非要搞那么多种干嘛,操,谁他娘的说不是了,估计这是为了每一种写法在字面意思上能体现不同的含义。
我没看具体的在WINNT.H里面这些是怎么弄的,但是按我的理解肯定是使用这种类似的定义的:
#ifdef UNICODE
typedef WCHAR * PTSTR *LPTSTR
#else
typedef CHAR *PTSTR *LPTSTR
#endif
靠,差不多就那么个意思,不对欢迎指正。
我们要将一个字符串写成ASCII和UNICODE字符集下都能用的可以这样写_T("AAA")或TEXT(“AAA”)
类型定义完了要干啥?要用,要处理,所以处理的函数来了。
第三:常见的一些通用函数( ASCii和UNICODE类型都能处理的 )
跟上面的一样,写程序的时候不可能,当然也有可能啊,不绝对,我说的是在脑子没被驴踢的情况下,谁都不愿意写2 个功能一样的长的一样的函数 而只为了处理字符集不同,在ASCii下strlen()和UNICODE夏的wcslen()都是获取字符数,所以这种情况下就需要定义一些通用的字符处理函数,名字如下:
lstrlen(PTSTR s)
lstrcpy(PTSTR s,PTSTR o)
lstrcpyn(PTSTR s,PTSTR o,count)
lstrcat(PTSTR s,PTSTR o)
lstrcmp(PTSTR s,PTSTR o)
lstrcmpi(PTSTR s,PTSTR o)
欧了,第二张差不多就这些内容,最后面还有个程序,放到下一次写.