Changeset 96 in libcf
- Timestamp:
- 05/27/13 09:37:51 (11 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/cf_codec.h
r90 r96 25 25 CF_EXPORT int 26 26 CF_Codec_Hex_Decode (const char * hex, 27 unsigned char * bin); 27 unsigned char * bin, 28 size_t * len); 28 29 29 30 CF_EXPORT int … … 34 35 CF_EXPORT int 35 36 CF_Codec_Base64_Decode (const char * base64, 36 unsigned char * bin); 37 unsigned char * bin, 38 size_t * len); 37 39 38 40 #ifdef __cplusplus -
trunk/src/cf_codec.c
r92 r96 73 73 * 74 74 * @param bin 바이너리 데이터 75 * @param len 바이너리 데이터 길이75 * @param len 바이너리 데이터의 길이 76 76 * @param hex 16진수 문자열을 저장할 주소 77 77 * … … 114 114 * @param hex 16진수 문자열 115 115 * @param bin 바이너리 데이터를 저장할 주소 116 * @param len 바이너리 데이터의 길이를 저장할 주소 116 117 * 117 118 * @remark … … 120 121 int 121 122 CF_Codec_Hex_Decode (const char * hex, 122 unsigned char * bin) 123 { 124 size_t length = strlen (hex); /* absolutely even-number */ 123 unsigned char * bin, 124 size_t * len) 125 { 126 size_t length = 0; /* absolutely even-number */ 125 127 size_t iter = 0; 126 int binlen = (int)length / 2;128 size_t binlen = 0; 127 129 128 130 const char * ptr = hex; … … 133 135 ASSERT_ARGS (hex == NULL); 134 136 ASSERT_ARGS (bin == NULL); 135 136 for (iter = 0 ; iter < binlen ; iter++) 137 ASSERT_ARGS (len == NULL); 138 139 *len = 0; 140 141 for ( ; g_ascii_HexDecode[(int)*ptr] && *ptr ; ptr++, length++); 142 143 if (*ptr) 144 return CF_ERROR_CODEC_NOT_HEXSTRING; 145 146 binlen = length / 2; 147 148 for (iter = 0, ptr = hex ; *ptr ; iter++) 137 149 { 138 150 val = 0; /* init/re-init docoding-buffer */ … … 145 157 asciiHex = g_ascii_HexDecode[(int)buf]; \ 146 158 \ 147 if (buf) \ 148 val |= (unsigned char) \ 149 (buf - asciiHex + (asciiHex == '0' ? 0 : 10)); \ 150 else \ 151 return CF_ERROR_CODEC_NOT_HEXSTRING; \ 159 val |= (unsigned char) \ 160 (buf - asciiHex + (asciiHex == '0' ? 0 : 10)); \ 152 161 } while (0) 153 162 … … 159 168 } 160 169 161 return binlen; 170 * len = binlen; 171 172 return CF_OK; 162 173 } 163 174 … … 232 243 * @param base64 base64 문자열 233 244 * @param bin 바이너리 데이터를 저장할 주소 245 * @param len 바이너리 데이터의 길이를 저장할 주소 234 246 * 235 247 * @remark … … 238 250 int 239 251 CF_Codec_Base64_Decode (const char * base64, 240 unsigned char * bin) 252 unsigned char * bin, 253 size_t * len) 241 254 { 242 255 const char * src = base64; … … 247 260 ASSERT_ARGS (src == NULL); 248 261 ASSERT_ARGS (dst == NULL); 262 ASSERT_ARGS (len == NULL); 263 264 *len = 0; 249 265 250 266 while (g_ascii_Base64Decode[(int)*src] < BASE64_PADDING_CHAR_INDEX) src++; -
trunk/test/codec.c
r90 r96 14 14 char encode[512] = {0x00,}; 15 15 unsigned char bin[512] = {0x00,}; 16 int length = 0;16 size_t length = 0; 17 17 18 18 /* hex */ … … 25 25 26 26 CF_DEBUG_PRINT (stderr, "= Convert hex to binary =\n"); 27 length = CF_Codec_Hex_Decode (encode, bin); 28 if (length < 0) { 27 if (CF_Codec_Hex_Decode (encode, bin, &length) < 0) { 29 28 // error 30 29 } 31 CF_DEBUG_PRINT_BIN (stderr, bin, (size_t)length, "bin : %s\n", bin); 30 else 31 CF_DEBUG_PRINT_BIN (stderr, bin, length, "bin : %s\n", bin); 32 32 33 33 memset (bin , 0x00, sizeof (bin)); … … 43 43 44 44 CF_DEBUG_PRINT (stderr, "= Convert base64 to binary =\n"); 45 length = CF_Codec_Base64_Decode (encode, bin); 46 if (length < 0) { 45 if (CF_Codec_Base64_Decode (encode, bin, &length) < 0) { 47 46 // error 48 47 } 49 CF_DEBUG_PRINT_BIN (stderr, bin, (size_t)length, "bin : %s\n", bin); 48 else 49 CF_DEBUG_PRINT_BIN (stderr, bin, length, "bin : %s\n", bin); 50 50 51 51 return 0; -
trunk/test/test.c
r94 r96 389 389 char encode[512] = {0x00,}; 390 390 unsigned char bin[512] = {0x00,}; 391 int length = 0;391 size_t length = 0; 392 392 393 393 /* hex */ … … 400 400 401 401 CF_DEBUG_PRINT (stderr, "= Convert hex to binary =\n"); 402 length = CF_Codec_Hex_Decode (encode, bin);403 if (length < 0) {404 // error405 }406 CF_DEBUG_PRINT_BIN (stderr, bin, (size_t)length, "bin : %s\n", bin);402 if (CF_Codec_Hex_Decode (encode, bin, &length) < 0) { 403 // error 404 } 405 else 406 CF_DEBUG_PRINT_BIN (stderr, bin, length, "bin : %s\n", bin); 407 407 408 408 memset (bin , 0x00, sizeof (bin)); … … 418 418 419 419 CF_DEBUG_PRINT (stderr, "= Convert base64 to binary =\n"); 420 length = CF_Codec_Base64_Decode (encode, bin);421 if (length < 0) {422 // error423 }424 CF_DEBUG_PRINT_BIN (stderr, bin, (size_t)length, "bin : %s\n", bin);425 } 420 if (CF_Codec_Base64_Decode (encode, bin, &length) < 0) { 421 // error 422 } 423 else 424 CF_DEBUG_PRINT_BIN (stderr, bin, length, "bin : %s\n", bin); 425 }
Note:
See TracChangeset
for help on using the changeset viewer.