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

一、之间的关系: UCS2码是用两个字节表示一个字符,如果字符是ASCII码中的字符,则一个字节为空(值为0),另一个字节为原ASCII码中的值。如:ASCII中的a,用UCS2表示为0a或a0。所以UCS2字符中的两个字节有个字节顺序问题,0a为大端,a0为小端。因此,在把UCS2字符转换成其它字符时,要先清楚字节顺序。

二、MTK 中的类型定义: U8 —— UINT8, unsigned char U16 —— UINT16, unsigned short U32 —— UINT32,unsigned long S8 —— SINT8,char S16 —— SINT16, short S32 —— SINT32, long

三、ASCII与UCS2转换: 在MTK中有专门的转换函数如:mmi_asc_to_ucs2(S8* pOutbuffer, S8* pInputbuffer); 假设现有一ASCII数组:char asc_str[20]; 如果转为U8则需声明UCS2的数组大小为ASCII数组大小的两倍,U8 ucs_u8_str[40]; 如果转为U16则声明的UCS2数组大小可以和ASCII数组大小一样,U16 ucs_u16_str[20]; 因为UCS2是用两个字节表示ASCII中的一个字节的,所以如果声明为U8 ucs_u8_str[20];的话,会使的转换结果溢出。(因为大家都是char类型嘛),而声明为U16的话就不需要使其大小为ASCII码数组大小的两倍了,只需要一样大小就可以了,因为U16是unsigned short类型,长度正好是char的两倍,所以正好用2个字节表示ASCII中的一个字节。 在MTK中能够用void gui_print_text(U16* text);函数输出的都是Unicode。

四、UNICODE和ASCII的存储: 存成ASCII形式:如: char num [10] = {0}; num[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形式存的话: char num [10] = {0}; UCS2Strcat((char *)num, L"1"); UCS2Strcat((char *)num, L"2"); UCS2Strcat((char *)num, L"3"); (但此处不能用 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_t ch = 'A'; 内存存放两个字节0x41, 0x00 ;//小端存储格式,即高字节在高字位,如果存为0x00, 0x41时,那存储格式为大端,即高字节在低字位 ascii定义:char ch ='A'; 内存存放一个字节0x41

五、UNICODE和ASCII的处理: char num_text[] = {0x56, 0x00, 0xF7, 0x53, 0x1A, 0xFF, 0x00, 0x00};//text号 在MTK中ASCII和UCS2分别有不同的处理函数,所以两者处理起来也不同: char* strcat (char*, const char*); strcpy(char *, const char *)等用于处理ASCII类型的字符。 S8 *UCS2Strcpy(S8 *strDestination, const S8 *strSource);S8 *UCS2Strcat(S8 *strDestination, const S8 *strSource);等用于处理UNICODE类型的字符。 两者区别在于,用于处理ASCII的函数在处理字符串的时候是单个字符逐个处理的,也就是碰到0x00就立即结束了。如:在处理“text号”字符串的时候,由于“text号”字符串的第二个元素是0x00,所以就会在此结束。 而处理UNICODE的函数在处理字符串的时候是两个字符一起处理的,也就是把“text号”字符串中的第一个和第二个元素看做一个字符,一起处理,也就是直到碰到连续的两个0x00才会结束。

六、UNICODE保存: MTK中U8和U16的保存是有区别的。一般U8用的是小端的格式,U16用的是大端的。如: Const U8 ucs2_u8_str[] = {0x41, 0x00, 0x46, 0x00, 0x00, 0x00};//AF Const U16 ucs2_u16_str[] = {0x0041, 0x0046, 0x0000};//AF 上面两个字串都表示”AF”,最后的0x0000表示结束符,如果字串不加结束符,则用gui_print_text()显示出来的结果会在字串的最后多一个方框。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jay_lee_1982/archive/2010/06/04/5648109.aspx

转载于:https://www.cnblogs.com/kevin860/p/11075191.html

UNICODE与ASCII码的关系(MTK)相关推荐

  1. python Unicode转ascii码的一种方法

    缘起 看到这样的数据:Marek Čech.Beniardá怎样变成相对应的ascii码呢 解决 import unicodedata s = u"Marek Čech" #(u表 ...

  2. Unicode编码 ASCII码 utf-8编码 中英文字符所占字节

    ASCII码 英文字符(字符和符号)占一个字节,中文字符(汉字和符号)占两个字节 utf-8编码 英文字符(字符和符号)占一个字节,中文字符(汉字和符号)占三个字节 Unicode编码 英文字符(字符 ...

  3. java unicode转ascii码_Java用native2ascii命令做unicode编码转换

    背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...

  4. MTK:NICODE与ASCII码使用

    转载:http://blog.sina.com.cn/s/blog_6b9f3c1f0100tyag.html 体会--UNICODE与ASCII码的关系. (2011-09-01 20:53:07) ...

  5. 手摸手带你理解 进制 字节 ASCII码 Unicode 与 字节编码(UTF-8 /16)等(下)

    手摸手带你理解 进制 字节 ASCII码 Unicode 与 字节编码(UTF-8 /16)等(上) Unicode 先讲讲这个东西的规则 Unicode 通常(不是所有)用两个字节来表示 一个字符 ...

  6. ascii码 iso 8859-1 Unicode 字符编码 UTF8编码 区别 表格

    第一:编码简单描述 一.ASCII码:美国佬最初把自己的语言用计算表示,发现 0--127  能把字母表+其它符号全能表示出来 二.  iso 8859-1:欧洲人,0---127 是ASCII码,1 ...

  7. c语言 字符转换成ascii吗,C语言字符转换ASCII码

    //函 数 名:CharToHex() //功能描述:把ASCII字符转换为16进制 //函数说明: //调用函数: //全局变量: //输    入:ASCII字符 //返    回:16进制 / ...

  8. ascii unicode utf8 gkb之间的关系

    Unicode UTF GBK之间的关系,在python中如何转化 2008-07-03 14:48 Unicode是一个字符集,不是一种编码,她只是定义了一个字符空间,把字符集中的字符映射到了相应的 ...

  9. ASCII码、Unicode编码对照表 —— ASCII控制字符 Unicode编码 字符编码的前世此生

    ASCII控制字符  Unicode编码 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)是基于拉丁字 ...

  10. 浅谈ASCII码、unicode码等

    文章目录 背景 ASCII码 小结 背景 总是会混淆ASCII码和Unicode码,本文对此进行一个简要的分析 ASCII码 定义:ASCII ((American Standard Code for ...

最新文章

  1. 全面系统地总结Linux的基本操作(上)
  2. SqoopFlume、Flume、HDFS之间比较
  3. Kubelet 源码剖析
  4. block,inline和inline-block
  5. oracle的存储过程怎么运行时间,ORACLE 定时运行存储过程经常使用时间间隔
  6. atitit。 hb Hibernate sql 查询使用
  7. 达奇机器人编程学院_趣味编程机器人:达奇和达达
  8. 英语时态8种基本时态讲解
  9. 用C语言输入半径求球体的体积
  10. 访问服务器硬盘速度慢,硬盘读取速度变慢 当前传输模式pio的解决方法
  11. Centos下安装Pure-ftpd
  12. MySQL慢查询,一口从天而降的锅!
  13. B端硬件产品需求评审
  14. 批量微信过滤软件 开通微信号码筛选
  15. 「Flink实时数据分析系列」2. 流处理基本概念
  16. N点标定-坐标系变换
  17. python执行cmd命令,并获得返回值
  18. webview 重定向
  19. Python学习之解决“千年虫”问题
  20. 【GPT4】微软 GPT-4 测试报告(9)结论与展望

热门文章

  1. Postman 把response的值自动放到变量里
  2. Android Studio安装、配置教程全 - 安卓开发环境的配置手册
  3. 电梯设计需求调研报告
  4. 大量用户升级iPhone3.0系统导致苹果服务器故障
  5. [转载]直接保存Matlab图像到PPT文件
  6. JavaScript(三)数据类型转换
  7. 从excel读取数据到datatable
  8. laravel 核心类Kernel
  9. servlet3.0理解
  10. 关于软件测试的5个误传