IBM i RPGLE 中的二进制数学

问题描述 投票:0回答:1

我正在尝试破译 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# 中复制结果)的帮助将不胜感激......

c# binary ibm-midrange rpgle
1个回答
0
投票

这正是数据结构覆盖所做的事情,这些是 EBCDIC 中这些字符的正确值。

EBCDIC 到 ASCII

© www.soinside.com 2019 - 2024. All rights reserved.