0

我正在尝试读取由旧版 Fortan 应用程序编写的二进制文件。

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

例如 1 : 9 位将包含 (0-511) 范围内的位置偏移值 22 位将包含 (1-2097151) 范围内的数据记录值

eg2 : 17 位将包含 (1-131071) 范围内的年份值 4 位将包含 (1-12) 范围内的月份值 5 位将包含 (1-31) 范围内的日期值 5 位将包含从 ( 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 回答