文字コードを通常の文字列に変換する、終端にヌル文字は書き込まない( 戻り値:書き込んだバイト数 )
| 946 | |
| 947 | // 文字コードを通常の文字列に変換する、終端にヌル文字は書き込まない( 戻り値:書き込んだバイト数 ) |
| 948 | __inline int PutCharCode_inline( u32 CharCode, int CharCodeFormat, char *Dest ) |
| 949 | { |
| 950 | switch( CharCodeFormat ) |
| 951 | { |
| 952 | case CHARCODEFORMAT_SHIFTJIS : |
| 953 | case CHARCODEFORMAT_GB2312 : |
| 954 | case CHARCODEFORMAT_UHC : |
| 955 | case CHARCODEFORMAT_BIG5 : |
| 956 | if( CharCode >= 0x100 ) |
| 957 | { |
| 958 | if( Dest != NULL ) |
| 959 | { |
| 960 | ( ( u8 * )Dest )[ 0 ] = ( u8 )( CharCode >> 8 ) ; |
| 961 | ( ( u8 * )Dest )[ 1 ] = ( u8 )( CharCode ) ; |
| 962 | } |
| 963 | return 2; |
| 964 | } |
| 965 | else |
| 966 | { |
| 967 | if( Dest != NULL ) |
| 968 | { |
| 969 | ( ( u8 * )Dest )[ 0 ] = ( u8 )CharCode ; |
| 970 | } |
| 971 | return 1 ; |
| 972 | } |
| 973 | |
| 974 | case CHARCODEFORMAT_ASCII : |
| 975 | case CHARCODEFORMAT_WINDOWS_1252 : |
| 976 | case CHARCODEFORMAT_ISO_IEC_8859_15 : |
| 977 | if( Dest != NULL ) |
| 978 | { |
| 979 | ( ( u8 * )Dest )[ 0 ] = ( u8 )CharCode ; |
| 980 | } |
| 981 | return 1 ; |
| 982 | |
| 983 | case CHARCODEFORMAT_UTF16LE : |
| 984 | case CHARCODEFORMAT_UTF16BE : |
| 985 | { |
| 986 | u32 DestCode1 ; |
| 987 | u32 DestCode2 ; |
| 988 | u32 DestSize ; |
| 989 | |
| 990 | // UTF-16 で表現できない値の場合はキャンセル |
| 991 | if( CharCode > 0x10ffff ) |
| 992 | { |
| 993 | return 0 ; |
| 994 | } |
| 995 | |
| 996 | if( CharCode > 0xffff ) |
| 997 | { |
| 998 | DestCode1 = 0xd800 | ( ( ( CharCode - 0x10000 ) >> 10 ) & 0x3ff ) ; |
| 999 | DestCode2 = 0xdc00 | ( ( CharCode - 0x10000 ) & 0x3ff ) ; |
| 1000 | |
| 1001 | DestSize = 4 ; |
| 1002 | } |
| 1003 | else |
| 1004 | { |
| 1005 | DestCode1 = CharCode ; |
no outgoing calls
no test coverage detected