0

従来のFortanアプリケーションで作成されたバイナリファイルを読み込もうとしています。

32ビットのチャンクにデータを書き込みます。これらの32ビットチャネルの一部には、複数のデータが含まれています。

例:1:9ビットには(0-511)の範囲の位置オフセット値が含まれます22ビットには(1-2097151)の範囲のデータレコード値が含まれます

eg2:17ビットには(1-131071)の範囲の年の値が含まれます4ビットには(1-12)の範囲の月の値が含まれます5ビットには(1-31)の範囲の日の値が含まれます5ビットには(1-12)の範囲の時間の値が含まれます1-24)

データの読み取り方法を知りたいのですが、32ビット値ストアを整数で取得できますが、その4バイト値のさまざまな部分を抽出するにはどのような操作を実行する必要がありますか。

4

1 に答える 1

3

一般的に、次のようなもの(必ずしも有効なC#ではありません)が機能するはずです。

int readValue(int sourceBits, int dataOffset, int dataLength) {
    unsigned int mask = pow(2, dataLength) - 1;
    return (sourceBits >> dataOffset) & mask;
}

データオフセットは、フィールドの右端のビットから始まり、値が左に向かって大きくなるものとして扱われることに注意してください。左から始まり右に伸びるオフセットを使用するには、次のようにします。

int readValue(int sourceBits, int dataOffset, int dataLength) {
    unsigned int mask = pow(2, dataLength) - 1;
    return (sourceBits >> (32 - (dataOffset - dataLength))) & mask;
}
于 2011-03-30T04:52:10.753 に答える