Convert a serialized integer into a 32-bit unsigned integer.
| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | ReadSerialUINT32 | (uint32_t&,uint32_t&,unsigned char*,) |
Declared in file: hzCodec.h
Defined in file : hzCodec.cpp
Function Logic:
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 ;
}