1

我正在将脚本从 C 迁移到 PHP ( http://svn.stellman-greene.com/mgrs_to_utm/trunk/ ),我在mgrs_to_utm.c中对这个概念有疑问:

Letters[0] = (toupper(MGRS[j]) - (long)'A');
if ((Letters[0] == LETTER_I) || (Letters[0] == LETTER_O))

MGRS[j]是字符串的一部分,但是 WTF 我可以(long)'A'将 a减去LETTER??

LETTER_I是一个整数(在mgrs_to_utm.h中定义)。

我想到了 PHP,但我找不到这个操作的逻辑。

非常感谢你的帮助 :)

4

1 回答 1

3

在 ASCII 中,字符“A”的值为 65,因此 Letters[0] 有效地包含了字母表中的偏移量(A 为 0)。

如果 MGRS[j] 是“I”(73),那么我们从中取“A”(65)以离开 8

ABCDEFGHIJ K...
0 1 2 3 4 5 6 7 8 9 10

代码与以下内容几乎相同:

如果(MGRS[j] == 'I' || MGRS[j] == 'O' || MGRS[j] == 'i' || MGRS[j] == 'o') 
于 2012-08-20T10:16:00.140 回答