今儿个咱来唠唠这个字符转换的事儿,听着挺玄乎,其实也没啥大不了的。就是些个电脑里的字儿,有时候长得不一样,得给它们倒腾倒腾。
你比如说,有些字儿它“胖”,占的地儿大,有些字儿它“瘦”,占的地儿小。这就像咱,有胖有瘦,一个道理。这电脑里头呢,就管那胖字儿叫宽字节,瘦字儿叫多字节。
那咋把胖字儿变瘦,瘦字儿变胖呢?就得用到一个叫 WideCharToMultiByte 的东西。这玩意儿,就跟个变戏法儿似的,能把胖字儿(Unicode字符串)变成瘦字儿(多字节字符串)。
这变戏法儿也不是瞎变的,它得有个规矩。就好比说,你想把鸡蛋变成鸡,那也得有个过程,不能说变就变。这 WideCharToMultiByte 也一样,它得按照一个叫代码页的东西来变。这代码页,就跟那变戏法的秘籍似的,告诉它咋个变法。
有时候,这变戏法的,会遇到点麻烦。比如说,它拿到一个胖字儿,翻遍了秘籍,也没找到对应的瘦字儿,这可咋整?这时候,就得请出两个帮手,一个叫 lpDefaultChar ,一个叫 pfUsedDefaultChar 。
-
这 lpDefaultChar 呢,就相当于一个备胎,告诉变戏法的,实在变不出来,就用这个备胎顶上。
-
那 pfUsedDefaultChar 呢,就相当于一个记录员,记下来,到底用了几个备胎。
这变戏法儿变完了,还得看看变的效果咋样。这 WideCharToMultiByte 会告诉你,变出来的瘦字儿占了多大地儿。要是你事先没给它准备好地儿,它就光告诉你,你需要多大地儿,但不会真给你变。你要是给它准备好了地儿,它就老老实实地把变好的瘦字儿放进去,再告诉你,到底用了多大地儿。
还有个跟 WideCharToMultiByte 相反的家伙,叫 MultiByteToWideChar 。这俩家伙,一个管把胖字儿变瘦,一个管把瘦字儿变胖,正好是一对儿。
除了这俩家伙,还有个叫 WIDECHAR 的函数,这玩意儿是干啥的呢?它是把那些“半个身子”的字儿,变成“整个身子”的字儿。就像把半个馒头,变成一个整个的馒头。
说到这儿,还得提一句,这电脑里的字儿嘞,可不能瞎捣鼓。你不能说,看着这个字儿顺眼,就直接把它变成那个字儿。这就像你不能把张三家的孩子,直接抱到李四家,那得乱套。这电脑里的字儿,也得规规矩矩地转换,不能乱来。char 和 wchar_t 这两种字儿,就不能直接划等号,得用专门的法子来转换。
这电脑里的事儿,说起来复杂,其实也简单。就像咱种地,春天种,秋天收,都有个道道儿。只要摸清了道道儿,啥事儿都不难。
今儿个就唠到这儿,希望大家伙儿都听明白了。要是没听明白,也没关系,反正这玩意儿,一时半会儿也用不着。等啥时候用着了,再琢磨也不迟。
Tags:[WideCharToMultiByte, MultiByteToWideChar, 字符转换, Unicode, 多字节, 宽字节, 代码页, char, wchar_t, WIDECHAR]