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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值