更改字节顺序的Fortran子例程 [英] Fortran Subroutine that changes byte order

查看:10
本文介绍了更改字节顺序的Fortran子例程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Fortran中编写了一个例程来执行相反的字节顺序。这相当于src="1234"; dst="4321"。我想将例程更改为使用变量srcdst指定的任意排序,以设置排序位置。

以下是字节顺序颠倒的代码。

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)

成子例程。

够快了吗?由你决定。

编辑:我对srcdst使用的字符变量似乎引起了一些混淆。如果srcdst是实数或整数,则该方法同样适用:

  REAL :: src, dst
只需注意确保字符数组中1字节元素的数量与srcdst中的字节数相同。自从这些1:1与字节的映射(在几乎所有您可能遇到的计算机上)以来,我一直使用字符作为中间表示,并且我已经将一个4字节标量转移到一个由1字节标量组成的4元素数组,以便于使用Fortran内置的索引功能进行置换。如果srcdat是字符变量,则也更容易看到发生了什么,否则src_arrdst_arr在写出时通常是不存在的字符的无意义的混乱。

这篇关于更改字节顺序的Fortran子例程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆