fortran fortran中文资料网
手气不错
Article

060.characterCodes_字符与字符码转换

2026年10月1日基础级

iachar与achar在ASCII排序序列的字符和编码之间转换,ichar与char则使用处理器的本机字符集。它们常用于字符分类、协议字段和可控的ASCII转换;适合单个字符的编码操作,不用于把文本“154”解析成整数154。

语法结构

code = iachar(character)
character = achar(code)
code = ichar(character)
character = char(code)
  • iachar与ichar只读取字符实参的第一个字符,返回整数编码。
  • achar使用ASCII排序序列,char使用处理器字符集;只有在本机字符集与ASCII一致时,相同字符的结果通常相同。
  • 字符码转换不同于数值文本解析。文本与数值之间的格式化转换应使用内部文件I/O。

本文代码

! 使用ASCII序列转换字母,并验证本机字符码的往返转换。
program characterCodesDemo
  implicit none

  character :: upperLetter, lowerLetter, symbol
  integer :: asciiCode, nativeCode

  upperLetter = "G"
  asciiCode = iachar(upperLetter)
  lowerLetter = achar(asciiCode + iachar("a") - iachar("A"))

  symbol = "*"
  nativeCode = ichar(symbol)

  print "(A,A)", "原大写字母:", upperLetter
  print "(A,I0)", "ASCII码:", asciiCode
  print "(A,A)", "转换后小写字母:", lowerLetter
  print "(A,I0)", "星号的本机字符码:", nativeCode
  print "(A,A)", "CHAR往返结果:", char(nativeCode)
end program characterCodesDemo

编译运行

(base) hong@hongdeMacBook-Pro 060.characterCodes % gfortran -Wall -Wextra -std=f2018 exampleCharacterCodes.f90 -o characterCodesDemo
(base) hong@hongdeMacBook-Pro 060.characterCodes % ./characterCodesDemo
原大写字母:G
ASCII码:71
转换后小写字母:g
星号的本机字符码:42
CHAR往返结果:*

现象分析

ASCII中G的编码是71,a与A的编码差为32,因此71+(97-65)=103,achar(103)得到小写g。代码没有直接写死32,而是由iachar计算两个字母的间距。

本机运行环境中星号的字符码是42,char(ichar(‘*’))重新得到星号,说明同一处理器上的本机字符码往返成立。

71和42是本次ASCII兼容环境的具体结果。需要明确ASCII语义时使用iachar/achar;仅需处理器内部往返时才使用ichar/char。

核心知识点

  • iachar/achar明确采用ASCII排序序列。
  • ichar/char采用处理器字符集,具体整数值可能不可移植。
  • 这些过程处理字符码,不负责格式化数值与字符串之间的转换。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注