首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Fortran中,以“#”开头和/或以“c”结尾的常量是什么意思?

在Fortran中,以“#”开头和/或以“c”结尾的常量是什么意思?
EN

Stack Overflow用户
提问于 2012-06-27 21:24:49
回答 2查看 519关注 0票数 3

我需要编译一个以前使用Compaq Fortran编译器的旧Fortran程序。我似乎弄不明白以“#”开头的常量是什么。gfortran说这是一个语法错误,我似乎找不到很多答案。

代码语言:javascript
复制
CHAR2 = IATA(KK) - #20202030
CHAR3 = IATA(KK+1) - #20202030

#20202030是什么类型的常量?根据注释,此代码应采用IATA中的两个ASCII字符,并将它们转换为二进制。有人能解释一下吗?

再往下:

代码语言:javascript
复制
IF (IATA(KK+1) .EQ. #2020202C) THEN

现在在末尾有一个“C”。那是什么意思?

我怎样才能把它移植到gfortran?感觉好像我漏掉了一些明显的东西。请给我开导一下。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 21:50:07

你看到的是非标准的Fortran。在Compaq Fortran中,#被用来作为十六进制常量的前缀,正如其中一个注释所建议的那样。正如另一个注释所建议的,十六进制常量的标准前缀是Z,数字应该用'‘标记括起来。因此,应该将非标准#2020202C转换为标准Z'2020202C'

至于尾随的C,我认为它只是一个十六进制数字。

票数 9
EN

Stack Overflow用户

发布于 2012-06-27 23:05:17

这只是一个评论:

除了是非标准表示法中的十六进制文字外,这些字符串也是适合32位整数值的ASCII字符串。当存储在内存中时,#20202030'___0'还是'0___',这取决于体系结构的字节顺序,而#2020202C'___,'',___' (下划线表示空白)。用空格填充是标准的Fortran行为,将8位字符存储到用空格填充的32位类型中,而不是NUL-s,例如使用#20202030而不是#00000030,对Fortran程序员来说应该不足为奇。

在C和C++中,从另一个字符中减去'0'是一种非常常见的方法,可以将012等字符转换为它们的数字等效项(这绝对不能用于特殊的Unicode符号)。例如,'9' - '0'给出9,因为9的ASCII码是0x39 (57),而0的ASCII码是0x30 (48)。Fortran不像C和C++那样将CHARACTER视为整数,必须使用ICHAR()IACHAR()将它们转换为ASCII码,但这段代码的工作方式与C/C++非常相似。

IATA数组是如何定义的?如何为其元素赋值?

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11227282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档