Base16.cc

Go to the documentation of this file.
00001 #include "Base16.h"
00002 
00003 namespace oasys {
00004 
00005 //------------------------------------------------------------------------------
00006 size_t 
00007 Base16::encode(const u_int8_t* in, size_t in_len, u_int8_t* out16, size_t out16_len)
00008 {
00009     const u_int8_t* encoding = reinterpret_cast<const u_int8_t*>("0123456789ABCDEF");
00010 
00011     if (in_len * 2 > out16_len) 
00012     {
00013         in_len = out16_len/2;
00014     }
00015 
00016     size_t i;
00017     for (i=0; i<in_len; ++i)
00018     {
00019         out16[2*i]     = encoding[in[i] & 0xF];
00020         out16[2*i + 1] = encoding[(in[i] >> 4) & 0xF];
00021     }
00022     return i;
00023 }
00024     
00025 //------------------------------------------------------------------------------
00026 size_t 
00027 Base16::decode(const u_int8_t* in16, size_t in16_len, u_int8_t* out, size_t out_len)
00028 {
00029     if (in16_len/2 > out_len) 
00030     {
00031         in16_len = out_len * 2;
00032     }
00033 
00034     size_t i;
00035     for (i=0; i<in16_len; i+=2)
00036     {
00037         u_int8_t lower = (in16[i] <= '9') ? (in16[i] - '0') : (in16[i] - 'A' + 10);
00038         u_int8_t upper = (in16[i+1] <= '9') ? (in16[i+1] - '0') : 
00039                          (in16[i+1] - 'A' + 10);
00040         out[i/2] = lower | (upper << 4);
00041     }
00042 
00043     return i/2;
00044 }
00045 
00046 } // namespace tier

Generated on Sat Sep 8 08:43:23 2007 for DTN Reference Implementation by  doxygen 1.5.3