А зачем вообще нужно сдвигать буфер? Почему нельзя его оставить как есть и для извлечения значений буфера ограничится всего лишь вызовом подобной функции?
Код
short GetBufVal(short *pBuffer, unsigned idx, unsigned nSize)
{ if (idx<nSize) return(*(short *)(pBuffer+idx));
else return(*(short *)(pBuffer+(nSize-idx)));
}