私は、符号無しの束をメモリにパックするアルゴリズムを逆にしようとしています。私はそれを逆転させようとしましたが、私は正しい数字を50%〜75%戻していますので、私は何が間違っているのか分かりません。すべての数字がメモリにパックされるまでは、次の呼び出しに返さBSTARTを渡して、行に数回呼ばれビットパッキングアルゴリズムを反転する
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;
}
:
この
はメモリに数値をパックするためのアルゴリズムです。これはそれを逆転で私の試みです:、私は正しいデータの束を取り戻すため、私はメモリに書いた数字にもよるが、私は、私は右の何かをやっている知っている
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;
}
から何か読み込まれた2番目から4番目までの数字が間違っています。
私がここで間違っていることは何ですか?
あなたは英語であなたのパッキングアルゴを説明できますか?数式(可読性)の場合でも、つまり:value =(x * 8)| yz << xyz – Adrian
下記の私の答えの後でさえ、コードを分析するだけで、コンパクトな方法を正確にはわかりません。 –
@Adrianそれは、16ビットのワードのうち10ビットを取り出し、4バイトを5バイト(40ビット)に戻してパッキングするようです。 –