我正在尝试阅读由传统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字节值的不同部分。
答案 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;
}