您的位置:程序门 -> c/c++ -> c++ 语言



困惑,中文的内存表示问题?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


困惑,中文的内存表示问题?
发表于:2008-01-22 18:22:43 楼主
“汉”字的unicode编码是6c49

wchar_t   wc[]   =   l"汉";   wc数组内存为49   6c   00   00
char     c[]         =   "汉";       c数组内存为ba   ba   00

这是为什么?baba是怎么来的?

知情者来解释一下啊!!!
发表于:2008-01-22 18:31:461楼 得分:0
wchar_t       wc[]       =       l"汉";       wc数组内存为49       6c       00       00   汉的unicode编码char           c[]                   =       "汉";               c数组内存为ba       ba       00   汉的gb2312编码
发表于:2008-01-22 18:50:542楼 得分:0
char*
使用gb2312,通常采用euc储存方法,以便兼容于ascii。      
每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。      
“高位字节”使用了0xa1-0xf7(把01-87区的区号加上0xa0),“低位字节”使用了0xa1-0xfe(把01-94加上0xa0)。      
例如“啊”字在大多数程序中,会以0xb0a1储存

wchar_t
应该是gbk编码

gbk:汉字国标扩展码,基本上采用了原来gb2312-80所有的汉字及码位,并涵盖了原unicode中所有的汉字20902,总共收录了883个符号,       21003个汉字及提供了1894个造字码位。       microsoft简体版中文windows       95就是以gbk为内码,又由于gbk同时也涵盖了unicode所有cjk汉字,所以也可以和unicode做一一对应。  
发表于:2008-01-22 19:28:423楼 得分:0
你这样定义   char   *   一般都是本地编码或者是utf8,   在windows上都是本地编码[如果你是繁体系统就是big5编码了],   linux上一般char   *是可以指向utf8编码的字符串,或者是本地编码字符串(我不是很清楚)

wchar_t   以及l的修饰符,   使得这个字串在内存以utf16的编码方式存在。这种l修饰的方式,一般仅限于个别的编译器支持。

windows   nt,   windows2000,   windowsxp   以后的内核,全部都是以utf16为编码核心的。而不是本地编码。0x6c49   是   【汉】的utf16或者说是ucs2的编码。

发表于:2008-01-22 19:35:144楼 得分:0
搜点有关汉字存储及编码的资料。不过楼上几位说的差不多了
发表于:2008-01-22 20:09:025楼 得分:0
顶   明天再来给分
发表于:2008-01-22 20:18:436楼 得分:0
http://baike.baidu.com/view/943167.htm
发表于:2008-01-22 21:05:477楼 得分:0
来晚了,看来lz都明白了。再参考一下这两个函数:
multibytetowidechar
widechartomultibyte


快速检索

最新资讯
热门点击