从 32 位块中读取 n 位
我正在尝试读取由旧版 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 字节值的不同部分。
I am trying to read a binary file written by an legacy Fortan application.
It writes data into chunks of 32bit. Some of these 32bit chnuk contains mutiple data.
e.g 1 :
9 bit will contain position offset value ranging from (0-511)
22 bit will contain data record value ranging from (1-2097151)
e.g.2 :
17 bit will contain year value ranging from (1-131071)
4 bit will contain month value ranging from (1-12)
5 bit will contain day value ranging from (1-31)
5 bit will contain hour value ranging from (1-24)
I am wondering how to read the data, I can get the 32bit value store in integer, but what operations should I perform to extract the different parts of that 4byte value.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一般来说,类似以下内容(不一定是有效的 C#)应该有效:
请注意,数据偏移量被视为从字段中最右边的位开始,值向左增长。要使用从左侧开始向右增长的偏移量,请执行以下操作:
Generally speaking, something like the following (which is not necessarily valid C#) should work:
Note that the data offset is treated as beginning from the rightmost bit in the field, with values growing to the left. To use offsets that begin from the left and grow to the right, do something like: