【发布时间】:2012-11-16 10:31:02
【问题描述】:
如果我在 Fortran 中有一个 c_int8_t 变量,并且想将底层位解释为无符号整数(用于索引而不是任何算术),那么进行转换的最有效方法是什么?我想做类似的事情
X( some_function( my_c_int8_t_var ) ) = 1
其中 X 是一个数组,some_function 应该返回一个包含 my_c_int8_t_var 的无符号值的 c_int16_t。我已经看到了包括 transfer、iadd 在内的选项(或者我猜只是一个带有强制转换和加法的简单条件),但我想知道最有效的方法是什么(这个索引是在内部循环中进行的)。当然,它不必是一个函数——如果它可以用一个内联表达式来完成,那就太好了。
编辑:如果该方法也适用于其他整数大小,那就太好了......即用于在 c_int32_t 中获取无符号 c_int16_t 的内容并将无符号 c_int32_t 获取到 c_int64_t 中。
【问题讨论】:
-
不可能使用有符号整数的整个范围声明
X,例如integer, dimension(-huge(my_c_int8_t_var) : huge(my_c_int8_t_var)) :: X?这样麻烦会少得多。 -
我明白你的意思,但在我的情况下,我没有使用完整范围 - 用户传递最大值,我相应地分配 X 数组(X(Xm)此刻或 X(0 :(Xm-1)). 我希望能够支持全部范围的无符号整数(因此可以达到 256 个而不需要转到 2 字节数据) - 但永远不要为提供的最大值分配超过必要的值.
-
哦,我明白了;我误解了这个问题的意图。
标签: integer fortran fortran95 fortran2003