Convert a serialized integer into a 32-bit signed integer.
| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | ReadSerialSINT32 | (int32_t&,hzChain::Iter&,) |
Declared in file: hzCodec.h
Defined in file : hzCodec.cpp
Function Logic:
Function body:
hzEcode ReadSerialSINT32 (int32_t& nValue)hzChain::Iter& zi,
{
// Category: Number Serialization
//
// Convert a serialized integer into a 32-bit signed integer.
//
// Arguments: 1) nValue Indicated length or value
// 2) zi Chain iterator (start of indicator)
//
// Returns: E_ARGUMENT If no ptr is supplied
// E_OK Operation successful
uint32_t val ; // Value
bool bNeg ; // Negative
bNeg = *zi & 0x40;
if (!(*zi & 0x80))
{
val = *zi & 0x3f;
zi++ ;
}
else
{
switch (*zi & 0x30)
{
case 0x00:// 1n00xxxx: 2 byte value
val = *zi & 0x0f;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
break ;
case 0x10:// 1n01xxxx: 3 byte value
val = *zi & 0x0f;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
break ;
case 0x20:// 1n10xxxx: 4 byte value
val = *zi & 0x0f;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
break ;
case 0x30:// 1n11xxxx: Next 4 bytes are the value
zi++ ; val = (uchar) *zi ;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
zi++ ; val <<&eq; 8; val+= (uchar) *zi ;
break ;
}
}
nValue = bNeg ? -val : val ;
return E_OK ;
}