1. 程式人生 > >C語言字元對映

C語言字元對映

今天在寫俄羅斯一個客戶的需求時,遇到了一個問題。

軟鍵盤的表示是用U8型別來表示的,但是俄羅斯的字母是ASCII碼1000以後的了,U8是無法表示的,但是我要把這個改為U16表示的話,牽一髮而動全身,要改的地方太多,無法保證錯誤,問了師傅說加字元對映是最穩妥的方法,因為最後還是要轉換成U16來顯示的,所以我就在轉換前加一個判定條件,來決定是否繼續轉換還是字元對映。

LS_U16 u16SwTempValue = 0;    //全域性變數

LS_U16* Media_PVR_softkeyboard_Text(HWND hWnd)

{

    LS_U8 u8Str[2] = {0};

    u8Str[0] = Media_PVR_Softkeyboard_Dispchar(hWnd);

         if((u8Str[0] == 0x00 || u8Str[0] == 0x01) || (u8Str[0] >=0xC0 ))

        {

        u16SwTempValue =  SoftwareKeyMapValue(u8Str[0]);

                   return &u16SwTempValue;

                   }

   U8StringToU16String(u8Str, p_string_buffer, strlen((char*)u8Str));

    return p_string_buffer;

}

If語句中判斷的是我想對映的值,因為軟鍵盤分為4種,英文字母和俄羅斯字母以及大小寫形式,只有俄羅斯字母才需要對映,下面是我對映的函式,當然這只是其中一種簡單的方法,這裡以小寫舉例。

LS_U16 SoftwareKeyMapValue(LS_U16 u8MapValue)

{

switch(u8MapValue)

{

    case 0xE0:     return 1072;

    case 0xE1:     return 1073;

         case 0xE2:     return 1074;

         case 0xE3:     return 1075;

         case 0xE4:     return 1076;

         case 0xE5:     return 1077;

         case 0xE6:     return 1105;

         case 0xE7:     return 1078;

         case 0xE8:     return 1079;

         case 0xE9:     return 1080;

         case 0xEA:     return 1081;         

         case 0xEB:     return 1082;         

         case 0xEC:     return 1083;         

         case 0xED:     return 1084;        

         case 0xEE:     return 1085;

         case 0xEF:     return 1086;

         case 0xF0:     return 1087;

         case 0xF1:     return 1088;

         case 0xF2:     return 1089;

         case 0xF3:     return 1090;

         case 0xF4:     return 1091;

         case 0xF5:     return 1092;

         case 0xF6:     return 1093;

         case 0xF7:     return 1094;

         case 0xF8:     return 1095;

         case 0xF9:     return 1096;

         case 0xFA:     return 1097;

         case 0xFB:     return 1098;

         case 0xFC:     return 1099;

         case 0xFD:     return 1100;         

         case 0xFE:     return 1101;

         case 0xFF:     return 1102;

         case 0x00:     return 1103;

    default:       return (LS_U16)u8MapValue;

}

return 0;

}

預設選項是應為鍵盤中例如數字等本可以用U8表示的就不需要映射了,只要強轉下型別就可以。