我正在尝试反转一种算法,该算法将一堆未签名的短裤打包到内存中。我试图扭转它,我得到正确的数字 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;
}
我知道我在做正确的事情,因为我得到了一堆正确的数据,尽管根据我写入内存的数字,从每四个到每一个读入的数字都是错误的。
有什么想法我在这里做错了吗?