生活随笔
收集整理的這篇文章主要介紹了
详解MTK系统中字符转换问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
詳解MTK系統中字符轉換問題
2011-09-05 19:02 佚名 互聯網?
字號:
T?|?
T MTK系統中字符轉換問題是本文要介紹的內容,主要是來了解并學習MTK中一些小案例的應用,具體內容來看本文詳解。
AD:2014WOT全球軟件技術峰會北京站 課程視頻發布
MTK系統中字符轉換問題是本文要介紹的內容,主要是來了解并學習MTK中一些小案例的應用,具體內容來看本文詳解。如果我不想在ref_list.txt文件中加入我們的字符串字符,那么我們是否可以直接在代碼里定義字符串呢?例如中文字符串,因為在代碼里定義的中文字符串都是GB碼的,而MTK系統對于字符函數API都只接受UNICODE編碼的。
我們可以通過文件conversion.c文件中的函數mmi_chset_text_to_ucs2(.... )函數對GB編碼的字符串進行轉換;但是使用該函數是必須將宏__MMI_CHSET_GB2312__打開,否則轉換后必定顯示亂碼;為什么會這樣呢?我們看入下代碼片斷:
在conversion.c中的頭部有如下代碼片斷:
#if?defined(__MMI_CHSET_BIG5__) ?mmi_chset_enum?g_chset_text_encoding?=?MMI_CHSET_BIG5; ?#elif?defined(__MMI_CHSET_GB2312__) ?mmi_chset_enum?g_chset_text_encoding?=?MMI_CHSET_GB2312; ?#else? ?mmi_chset_enum?g_chset_text_encoding?=?MMI_CHSET_UTF8; ?#endif?? 由此可見,如果我們不打開__MMI_CHSET_GB2312__宏,g_chset_text_encoding 就是不是MMI_CHSET_GB2312 值;而是其它值,則函數mmi_chset_text_to_ucs2(....)就不能對GB編碼的字符串進行轉換。
mmi_chset_text_to_ucs2(....)函數片斷:
kal_int32?mmi_chset_text_to_ucs2(kal_uint8?*dest,?kal_int32?dest_size,?kal_uint8?*src) ?{ ??/*----------------------------------------------------------------*/ ??/*?Local?Variables*/ ??/*----------------------------------------------------------------*/ ??/*----------------------------------------------------------------*/ ??/*?Code?Body*/ ??/*----------------------------------------------------------------*/ ??return?mmi_chset_convert(g_chset_text_encoding,?MMI_CHSET_UCS2,?(char*)src,?(char*)dest,?dest_size); ?}? 問題是我們如何打開宏__MMI_CHSET_GB2312__呢?
我們來看看MKT的features配置文件——MMI_features.h中的片斷。
#if?defined(CFG_MMI_CHSET_GB2312)?&&?(CFG_MMI_CHSET_GB2312?==?__ON__)?||?\ ??(defined(__MMI_LANG_CHSET_DEPENDENCE__)?&&?defined(__MMI_LANG_SM_CHINESE__)) ??#ifndef?__MMI_CHSET_GB2312__ ??#define?__MMI_CHSET_GB2312__ ??#endif ?#endif? 那么宏CFG_MMI_CHSET_GB2312又在哪里呢?????
我們看看文件MMI_features_switch.h代碼片斷如下:
/* ???Description:?Turn?on?simple?Chinese?GB2312?charset ???Option:?[__ON__,?__OFF__,?__AUTO__] ???Reference:?SOP_Add_New_Charset_Conversion.doc ?*/ ??#define?CFG_MMI_CHSET_GB2312?(__AUTO__)? [疑問]在配置文件MMI_features_type.h中有如下定義
/*?general?on/off/auto?type?*/ ?#define?__ON__?(-1) ?#define?__OFF__(-2) ?#define?__AUTO__??(-3)? 其中__AUTO__ 不知道是什么意思??????
當然如果__MMI_CHSET_GB2312__沒有被Enable,我們可以直接使用函數mmi_chset_convert()
該函數原形如下所示:
/***************************************************************************** ??*?FUNCTION ??*??mmi_chset_convert ??*?DESCRIPTION ??*??Convert?string?between?2?character?sets.?(will?add?the?terminate?character) ??*?PARAMETERS ??*??src_type??[IN]??Charset?type?of?source ??*??dest_type?[IN]??Charset?type?of?destination ??*??src_buff??[IN]??Buffer?stores?source?string ??*??dest_buff?[OUT]?Buffer?stores?destination?string ??*??dest_size?[IN]??Size?of?destination?buffer?(bytes) ??*?RETURNS ??*??Length?of?destination?string,?including?null?terminator.?(bytes) ??*****************************************************************************/ ?kal_int32?mmi_chset_convert( ?mmi_chset_enum?src_type, ?mmi_chset_enum?dest_type, ?char?*src_buff, ?char?*dest_buff, ?kal_int32?dest_size);? 使用方式如下:
mmi_chset_convert(MMI_CHSET_GB2312,MMI_CHSET_UCS2,(char?*?)soure_string,(char?*)destion_string,source_size);? 小結:MTK系統中字符轉換問題的內容介紹完了,希望通過本文的學習能對你有所幫助!
總結
以上是生活随笔為你收集整理的详解MTK系统中字符转换问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。