バイト配列から読み取りたい s32 というマルチバイト プリミティブ型があります。
仕様は次のとおりです。
これは 32 ビットの符号付き整数値で、リトルエンディアン順に格納されます。
負の整数は、2 の補数を使用して表されます。
大きさに応じて 1 ~ 5 バイトを使用します。各バイトは、下位 7 ビットが値に寄与します。上位 (8 番目) ビットが設定されている場合、次のバイトも値の一部です。
符号拡張が適用されます。エンコードの最後のバイトの 7 番目のビットが伝播され、デコードされた値の 32 ビットが埋められます。
U32 - unsigned 32-bit の場合、私はこれを考え出しました (どんなコメントも歓迎します!) が、S32 用にそれを変更する方法がわかりません。
char temp = 0;
u32 value = 0;
size_t index = 0;
for(int i = 0; i < 5; i++)
{
if(i < 4)
{
temp = 0x7F & buffer[index];
}
else
{
temp = 0x0F & buffer[index];
}
value |= temp << (7 * i);
if(!(0x80 & buffer[index])) break;
++index;
}
みんな、ありがとう!