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表示的就不需要映射了,只要強轉下型別就可以。