更改字节顺序的Fortran子例程 [英] Fortran Subroutine that changes byte order
本文介绍了更改字节顺序的Fortran子例程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Fortran中编写了一个例程来执行相反的字节顺序。这相当于src="1234"; dst="4321"
。我想将例程更改为使用变量src
和dst
指定的任意排序,以设置排序位置。
以下是字节顺序颠倒的代码。
Subroutine byteorder (src, dst, x, y)
Real, Intent (out) :: y
Character (Len=*), Intent (in) :: src, dst
Real, Intent (in) :: x
Integer :: i, j
i = Transfer (x, 0)
Call Mvbits (i, 24, 8, j, 0 )
Call Mvbits (i, 16, 8, j, 8 )
Call Mvbits (i, 8, 8, j, 16 )
Call Mvbits (i, 0, 8, j, 24 )
y = Transfer (j, 0.0)
End Subroutine byteorder
推荐答案
您可以像这样包装
CHARACTER(len=4) :: src, dst
CHARACTER(len=1), DIMENSION(4) :: src_arr, dst_arr
INTEGER, DIMENSION(4) :: permutation
permutation = [2,4,3,1]
src_arr = TRANSFER(src,src_arr)
dst_arr = src_arr(permutation)
dst = TRANSFER(dst_arr,dst)
成子例程。
够快了吗?由你决定。编辑:我对src
和dst
使用的字符变量似乎引起了一些混淆。如果src
和dst
是实数或整数,则该方法同样适用:
REAL :: src, dst
只需注意确保字符数组中1字节元素的数量与src
和dst
中的字节数相同。自从这些1:1与字节的映射(在几乎所有您可能遇到的计算机上)以来,我一直使用字符作为中间表示,并且我已经将一个4字节标量转移到一个由1字节标量组成的4元素数组,以便于使用Fortran内置的索引功能进行置换。如果src
和dat
是字符变量,则也更容易看到发生了什么,否则src_arr
和dst_arr
在写出时通常是不存在的字符的无意义的混乱。
这篇关于更改字节顺序的Fortran子例程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文