Которая позволяет записывать и читать
величины переменной длины, подобные временам дельта.
Функция WriteVarLen(), передает 32-битное значение и преобразует
его в последовательность байтов, записываемых в файл.
Функция ReadVarLen() читает последовательность байтов из
файла до тех пор, пока не достигнет последнего байта значения
переменной длины, после чего возвращает 32-битное значние.
- Код: Выделить всё
void WriteVarLen(register unsigned long value)
{
register unsigned long buffer;
buffer = value & 0x7F;
while ( (value >>= 7) )
{
buffer <<= 8;
buffer |= ((value & 0x7F) | 0x80);
}
while (TRUE)
{
putc(buffer,outfile);
if (buffer & 0x80)
buffer >>= 8;
else
break;
}
}
unsigned long ReadVarLen()
{
register unsigned long value;
register unsigned char c;
if ( (value = getc(infile)) & 0x80 )
{
value &= 0x7F;
do
{
value = (value >> 7) + ((c = getc(infile)) & 0x7F);
} while (c & 0x80);
}
return(value);
}
заранее благодарен Дмитрий.