我正在尝试破译 RPGLE 中的一段旧代码,以便我可以将其转换为 C#。 这是有问题的代码:
D DS
D S2DATE 1 6 0
D S2DA 1 6
D DIM(6)
D DS
D WI 1 2B 0
D WIBIN 2 2
C DO 6 X
C CLEAR WI
C MOVE S2DA(X) WIBIN
C MULT X WI
C ADD WI S2PASS
C END
S2DATE 是屏幕上的数字输入字段,包含值 081523
EVAL s2da
S2DA(1) = '0'
S2DA(2) = '8'
S2DA(3) = '1'
S2DA(4) = '5'
S2DA(5) = '2'
S2DA(6) = '3'
当我执行此代码时,这些是每个元素的结果:
When X = 1: WIBIN = '0'
WI = 0240
When X = 2: WIBIN = '8'
WI = 0248
When X = 3: WIBIN = '1'
WI = 0241
When X = 4: WIBIN = '5'
WI = 0245
When X = 5: WIBIN = '2'
WI = 0242
When X = 6: WIBIN = '3'
WI = 0243
据我所知,数据结构似乎正在尝试将 WIBIN 的单个字符重新定义为二进制字段 - 但这些不是这些字符的二进制值(我不明白“240”值在哪里)来自(哪里)。如果这些值实际上不是二进制的,那么将很难将代码转换为 C#。 我不能简单地从 WI 值中删除/减去 240,因为这是来自生产中的代码。我只是想在 C# 中复制结果。
任何帮助理解正在发生的事情(或如何在 C# 中复制结果)的帮助将不胜感激......
这正是数据结构覆盖所做的事情,这些是 EBCDIC 中这些字符的正确值。