Fortran如何对二进制文件中的位进行操作?

按字节读取一个二进制文件中的变量之后,如何对该变量中的位进行操作呢?... 按字节读取一个二进制文件中的变量之后,如何对该变量中的位进行操作呢? 展开
 我来答
天河流纹石
推荐于2016-07-20 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7624
采纳率:76%
帮助的人:4046万
展开全部
Fortran 本身对位操作的支持不多。没有直接的操作符。

但提供了一系列的位操作函数,例如:
IAND, IOR, IEOR, NOT
ISHFT , ISHFTC
IBSET, IBCLR, BTEST, IBITS , MVBITS
你可以在你的编译器帮助里找到它们。
更多追问追答
追问
感谢您的关注,我的问题具体是这样的,我在读取一个二进制文件时,有一个变量定义为8个字节,我按长整型将其读出后(当然并不是想要的数,因为它是按每3bit定义为一个数),我现在就不明白如何对变量的位进行直接判断和操作.
追答
8个字节,也就是64位。每3bit一个数,一共21个数,多余的一位是没有作用是吗?

那么这多余的一位,是在前面,还是后面呢?

根据你的情况,我举个例子(假设在前面)。
比如:
Program Baidu_Thlws
Implicit None
integer*8 iiRead64b !// 这是你读到的
integer*8 iiRead3b( 21 ) !// 你要转换为 21 个 3bit 的整数
integer i
!// 假设你读出的64位分别是以下,也就是 21 个 110(2进制),对于的位在前面
!// 也就是 0 110 110 110 110 110 重复21次
iiRead64b = b'0110110110110110110110110110110110110110110110110110110110110110'
iiRead3b(:) = 0 !// 这个初始化非常重要
Do i = 1 , 21
!// 这句的意思是,将 iiRead64b 的第 (i-1)*3 开始 的 3 位,移动到 iiRead3b(i) 的第 0 位
call MVBITS( iiRead64b , (i-1)*3 , 3 , iiRead3b(i) , 0 )
End Do
End Program Baidu_Thlws

最后你会得到21个 110(2进制),也就是 iiRead3b 是21个 十进制的 6
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式