バイトには8ビットが含まれます。ビットは2の累乗で番号が付けられているため、最上位ビットから最下位ビットまで7から0になります。したがって:
byte myByte = SomeFunctionToGetAByte();
bool isBit7Set = myByte & (2^7);
bool isBit6Set = myByte & (2^6);
bool isBit5Set = myByte & (2^5);
bool isBit4Set = myByte & (2^4);
bool isBit3Set = myByte & (2^3);
bool isBit2Set = myByte & (2^2);
bool isBit1Set = myByte & (2^1);
bool isBit0Set = myByte & (2^0);
この値は、ビット7に始まり、ビット0で終わるので、バイト境界に落ちてしまっので、取得するのは簡単であるべき。
長さが24ビットなので、3バイト(24ビット÷8ビット/バイト= 3バイト)を読み込む必要があります。しかし、バイトの順番を知る必要があります。最上位の数字は、まず手書きで書く方法で、Mac/68000アーキテクチャでは一般的です。または最下位の有効数字が最初に表示されます。これは、Wintelアーキテクチャでは一般的です。ドキュメンテーションはあなたにこれを伝える必要があります。
配列内に完全なバイト配列があるとします。
byte[] bytes = GetByteArray();
あなたは、すべての3つのバイトをつかむそれらの一方は8ビット左シフト(または2^8又は256を掛け)、(2^16または65536を掛け)別の16ビットを左にシフトする必要があります3つ上のすべてを追加します(またはORの結果は同じになります)。
それは(LSBファースト)リトルエンディアンならフォーマットはBig Endian(最初にMSB)であれば値が
int value = bytes[2] << 16 | bytes[3] << 8 | bytes[4];
だろう、それは次のとおりです。
int value = bytes[4] << 16 | bytes[3] << 8 | bytes[2];
.NETのintには、31ビット(プラス1つの符号ビット)しか含めることができません。 'uint'は32を保持できます。最大容量の場合、拡張メソッドは64ビットを保持する' ulong'を返すことができ、最大8バイトで動作します。 –