Я пытаюсь изменить алгоритм, который у меня есть, который упаковывает кучу неподписанных шорт в память. Я попытался повернуть вспять, и я получаю правильные числа обратно 50% - 75% времени, поэтому я не уверен, что я делаю неправильно.
Это алгоритм для упаковки чисел в память:
BYTE packNumber(BYTE bStart, WORD value, BYTE * buffer, DWORD * counter)
{
value = (value<<(6-bStart));
*(buffer + *counter) |= (BYTE)(value>>8);
*(buffer + *counter+1) |= (BYTE)value;
bStart = (bStart+2)%8;
if (bStart)
*counter+= 1;
else
*counter+= 2;
return bStart;
}
Это вызывается несколько раз подряд, передавая возвращенный bStart в следующий вызов, пока все числа не будут упакованы в память.
Это моя попытка изменить его:
BYTE unpackNumber(BYTE bStart, WORD *value, BYTE * buffer, DWORD * counter)
{
*value= 0;
*value|= *(buffer + *counter);
*value= *value<< 8;
*value|= *(buffer + *counter+1);
*wVal = (*value>>(6-bStart));
bStart = (bStart+2)%8;
if (bStart)
*counter+= 1;
else
*counter+= 2;
return bStart;
}
Я знаю, что делаю что-то правильно, так как я получаю кучу правильных данных, хотя в зависимости от чисел, которые я записал в память, что-то от каждого четвертого до каждого второго считанного числа неверно.
Есть идеи, что я здесь не так делаю?