unicode与ascii码的关系

unicode与ascii码的关系

ID:8814399

大小:35.50 KB

页数:4页

时间:2018-04-08

unicode与ascii码的关系_第1页
unicode与ascii码的关系_第2页
unicode与ascii码的关系_第3页
unicode与ascii码的关系_第4页
资源描述:

《unicode与ascii码的关系》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、ASCII:8bits的英文编码,实际使用低7位,127个字符。32(0x20)为空格,之前是控制字符,之后是有效字符。Unicode:使用两字节对全球字符进行统一编码,有65536个编码,UCS-2为两字节版本(2^16=65536)。Unicodelittleendian:将Unicode中表示同一字符的两个字节顺序反过来,为了适应CPU处理字符的方式,加快处理速度。如:把字符”0xFEFF”存为FFEF的格式。Unicodebigendian:Unicode字符编码以正序存储。一、之间的关系:UCS2码

2、是用两个字节表示一个字符,如果字符是ASCII码中的字符,则一个字节为空(值为0),另一个字节为原ASCII码中的值。如:ASCII中的a,用UCS2表示为0a或a0。所以UCS2字符中的两个字节有个字节顺序问题,0a为大端,a0为小端。因此,在把UCS2字符转换成其它字符时,要先清楚字节顺序。二、MTK中的类型定义:U8——UINT8,unsignedcharU16——UINT16,unsignedshortU32——UINT32,unsignedlongS8——SINT8,charS16——SINT16,

3、shortS32——SINT32,long三、ASCII与UCS2转换:在MTK中有专门的转换函数如:mmi_asc_to_ucs2(S8*pOutbuffer,S8*pInputbuffer);假设现有一ASCII数组:charasc_str[20];如果转为U8则需声明UCS2的数组大小为ASCII数组大小的两倍,U8ucs_u8_str[40];如果转为U16则声明的UCS2数组大小可以和ASCII数组大小一样,U16ucs_u16_str[20];因为UCS2是用两个字节表示ASCII中的一个字节的,

4、所以如果声明为U8ucs_u8_str[20];的话,会使的转换结果溢出。(因为大家都是char类型嘛),而声明为U16的话就不需要使其大小为ASCII码数组大小的两倍了,只需要一样大小就可以了,因为U16是unsignedshort类型,长度正好是char的两倍,所以正好用2个字节表示ASCII中的一个字节。在MTK中能够用voidgui_print_text(U16*text);函数输出的都是Unicode。四、UNICODE和ASCII的存储:存成ASCII形式:如:charnum[10]={0};nu

5、m[0]='1';num[1]='2';num[2]='3';(或者:strcat((char*)num,"1");strcat((char*)num,"2");strcat((char*)num,"3");也可以)在内存中num={0x31,0x32,0x33,0x00……};如果是用UNICODE形式存的话:charnum[10]={0};UCS2Strcat((char*)num,L"1");UCS2Strcat((char*)num,L"2");UCS2Strcat((char*)num,L"3");

6、(但此处不能用num[0]=L'1';num[1]=L'2';num[2]=L'3';因为以UNICODE形式存的话,系统就会强行把0x31,0x00放到一个char元素里面,结果会出错。所以只能用UCS2Strcat()函数,否则的话就要把num声明为U16类型的也可以直接赋值。)在内存中num={0x31,0x00,0x32,0x00,0x33,0x00,0x00,0x00……};UNICODE每个字符占两个字节。ASCII占一个。如:字符‘A’在内存中的表现:unicode定义:wchar_tch='A

7、';内存存放两个字节0x41,0x00;//小端存储格式,即高字节在高字位,如果存为0x00,0x41时,那存储格式为大端,即高字节在低字位ascii定义:charch='A';内存存放一个字节0x41五、UNICODE和ASCII的处理:charnum_text[]={0x56,0x00,0xF7,0x53,0x1A,0xFF,0x00,0x00};//text号在MTK中ASCII和UCS2分别有不同的处理函数,所以两者处理起来也不同:char*strcat(char*,constchar*);strcp

8、y(char*,constchar*)等用于处理ASCII类型的字符。S8*UCS2Strcpy(S8*strDestination,constS8*strSource);S8*UCS2Strcat(S8*strDestination,constS8*strSource);等用于处理UNICODE类型的字符。两者区别在于,用于处理ASCII的函数在处理字符串的时候是单个字符逐个处理的,也就是碰到0x

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。