从32位块读取n位

时间:2011-03-30 04:43:13

标签: c# binaryreader

我正在尝试阅读由传统Fortan应用程序编写的二进制文件。

它将数据写入32位的块。其中一些32位chnuk包含多个数据。

例如1: 9位将包含位置偏移值,范围为(0-511) 22位将包含范围为(1-2097151)

的数据记录值

例如2: 17位将包含年份值(1-131071) 4位将包含月份值(1-12) 5位将包含日期值(1-31) 5位将包含小时值,范围为(1-24)

我想知道如何读取数据,我可以得到整数的32位值存储,但是我应该执行哪些操作来提取该4字节值的不同部分。

1 个答案:

答案 0 :(得分: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;
}