Convert a serialized integer into a 32-bit unsigned integer.

Return TypeFunction nameArguments
hzEcodeReadSerialUINT32(uint32_t&,uint32_t&,unsigned char*,)

Declared in file: hzCodec.h
Defined in file : hzCodec.cpp

Function Logic:

0:START 1:unknown 2:Return hzerr(E_ARGUMENT,No length indicator supplied) 3:unknown 4:*ptr&0xE0 5:0x80 6:ptr 7:nValue nValue nLen

Function body:

hzEcode ReadSerialUINT32 (uint32_t& nValue)uint32_t& nLen, unsigned char* ptr, 
{
   //  Category: Number Serialization
   //  
   //  Convert a serialized integer into a 32-bit unsigned integer.
   //  
   //  Arguments: 1) nValue Indicated length or value
   //     2) nLen The size of the indicator itself
   //     3) ptr  Pointer into a uchar buffer (start of indicator)
   //  
   //  Returns: E_ARGUMENT If no ptr is supplied
   //     E_OK  Operation successful
   if (!ptr)
       return hzerr(E_ARGUMENT, "No length indicator supplied") ;
   if (*ptr & 0x80)
   {
       //  Top bit set so indicator length will be ...
       switch  (*ptr & 0xE0)
       {
       case 0x80://  100xxxxx: 2 byte serial
                   nValue = ((ptr[0]& 0x1f)<<8);
                   nValue += ptr[1];
                   nLen = 2;
                   break ;
       case 0xA0://  101xxxxx: 3 byte serial
                   nValue += ((ptr[1]<< 8)+ ptr[2]);
                   nLen = 3;
                   break ;
       case 0xC0://  110xxxxx: 4 byte serial
                   nValue += ((ptr[1]<< 16)+(ptr[2]<< 8)+ ptr[3]);
                   nLen = 4;
                   break ;
       case 0xE0://  11100000: Next 4 bytes
                   _endian_import4(nValue, ptr + 1);
                   nLen = 5;
                   break ;
       }
   }
   else
   {
       nLen = 1;
       nValue = *ptr & 0x7f;
   }
   return E_OK ;
}