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