正式博文的开篇:MTK有关字符的种种Unicode和Ansii的转化

      走出学校已经整整实习了两个月了,但是自我感觉,还是以学生的心态在对待工作:总想找些资料或者高手教自己不会的,总想着自己的工作就是老板留下的作业,总想着这些就是老板跟老师一样可以什么都问他,总想着上课好好听讲,老板也会讲......

      后来看的博文多了,看到了大家手笔的文章,才知道世界之大,我所知道的实在是太过渺小,无知者果然是无惧、果然能达到心高气傲、万事皆可为我手出。受过几次小小的打击后,开始了自我反思:在实习的那天就告诉自己说“我要成为一个程序员”,那到底该怎么做呢?

      我要做的就是:习惯看代码多过看解释文章,习惯做记录、写博文多过Ctrl+C/Ctrl+V,习惯好的技术网站学东西多过别人教自己,习惯自己敲代码多过看别人的代码和注释...  ...

      废话少说,闲言莫谈;今天,DR就开始自己的第一课,对MTK中字符串的知识做一个简要介绍。

      做MTK平台项目的过程中,字符串之间的转化一直困扰了我很长时间,主要的困扰点在于Unicode和Anscii这两种字符的转化和应用。

      S8   —— signed char  —— kal_int8

      S16 —— signed short —— kal_int16

      S32 —— signed int     —— kal_int32

  

      U8  ——  unsigned char  ——kal_uint8

      U16 —— unsiged short    —— kal_uint16

      U32 —— unsiged int        —— kal_uint32

 

      1)一下几个函数是我的项目中经常在屏幕中需要使用,使用的都是Unicode编码的

            gui_print_text();     文本绘制函数,常需要用UI_string_type进行强制转换

            gdi_image_draw_file(OFFSET_X, OFFSET_Y, IMAGE_NAME);    //动态从文件系统中获取静态图片

            gdi_anim_draw_file(OFFSET_X, OFFSSET_Y, IMAGE_NAME, HANDLE_PTR);    //动态从文件系统中获取动画图片

      2)为了使用方便,我常常使用char,int定义我的变量,主要考虑这样的空间所占的比较小,但是在应用上面的函数时,总会出现这样或那样的字符转化错误:主要错误有不同编码的字符串拼接到一块时出现错误,不同字符串的拷贝出现错误,不同字符串转化为同一一中字符编码时出现错误,还有其他的小错误。

      3)在MTK中有关于Anscii和Unicode的转化函数:mmi_asc_to_ucs2(S8* pOutbuffer, S8* pInputbuffer);

          该函数在使用时要注意:

          如果char  arraylist[10]; 如果转化为U8,则需要UCS2的数组大小为Anscii的两倍,即U8  arraylist_ucsc2[20]; 如果转化为U16,则只需UCSC2的数组大小为Anscii同样大小的对应数组一样就行了,即 U16 array_list_u16[10];

          在使用该函数的时候,如果比S8类型小,则可以隐士转化为S8类型的而不会报错;如果转化为比S8大的,在make new的时候,会报“implicit cast of pointer to non-equal pointer”这样的错误,因此在使用时要加以强制类型转换,即在类型前面加PS8或者S8*,这样可以避免这样的错误。

         有了这个函数后,就可以统一采用Anscii码来编程序,在有用到U16或者U8等类型的时候,可以直接转化自己需要的Unicode编码

     4)专门的字符处理函数

         

MTKASCIIUCS2分别有不同的处理函数,所以两者处理起来也不同:

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类型的字符

你可能感兴趣的:(MTK123)