OSDN Git Service

88ac6794176f9c16fda4bcc8184bf2fa495b1e3c
[mimic/MiMicSDK.git] / lib / src / mimicvm / NyLPC_mimicvm_utils.c
1 #include "NyLPC_mimicvm_utils_protected.h"\r
2 /**\r
3  * i_txtを16進数に変換する。\r
4  * @param i_txt\r
5  * テキスト形式の16進数。[a-f0-9]+であること\r
6  * @param i_num\r
7  * i_txtの長さ。2,4,8のいずれかであること。\r
8  * @param out\r
9  * 出力値を格納するメモリアドレス。\r
10  * i_numにより、必要なサイズが変化する。\r
11  *\r
12  */\r
13 NyLPC_TBool NyLPC_mimicvm_txt2UInt(const NyLPC_TChar* i_txt,NyLPC_TUInt8 i_num,void* out)\r
14 {\r
15         NyLPC_TUInt32 ret=0;\r
16         NyLPC_TChar c;\r
17         int i;\r
18 \r
19         for(i=0;i<i_num;i++){\r
20                 c=(*(i_txt+i));\r
21                 if('f'>=c && c>='a'){\r
22                         c=c-(NyLPC_TUInt8)'a'+10;\r
23                 }else if('9'>=c && c>='0'){\r
24                         c-=(NyLPC_TUInt8)'0';\r
25                 }else{\r
26                         return NyLPC_TBool_FALSE;\r
27                 }\r
28                 ret=(ret<<4)|c;\r
29         }\r
30         //2,4,8だけ。\r
31         switch(i_num){\r
32         case 2:\r
33                 *((NyLPC_TUInt8*)out)=(NyLPC_TUInt8)ret;\r
34                 break;\r
35         case 4:\r
36                 *((NyLPC_TUInt16*)out)=(NyLPC_TUInt16)ret;\r
37                 break;\r
38         case 8:\r
39                 *((NyLPC_TUInt32*)out)=(NyLPC_TUInt32)ret;\r
40                 break;\r
41         default:\r
42                 return NyLPC_TBool_FALSE;\r
43         }\r
44         return NyLPC_TBool_TRUE;\r
45 }\r