【问题标题】:Read value from As400 RPG program to string从 As400 RPG 程序读取值到字符串
【发布时间】:2017-10-02 16:32:59
【问题描述】:

我正在从 C# 调用 as400 Rpg 程序。我向它传递了 6 个带值的参数和一个为空的第 7 个参数,并从程序中返回。我确实以字节的形式从程序中接收到一个值。根据程序的执行,返回的值应该是 1 或 0。

我试过用这个string result = System.Text.Encoding.UTF8.GetString(byteArray);

返回这个 � 符号。我尝试转换为返回 F1 的十六进制。如何在 C# 中获取该字节的值?我再次知道唯一可能的值是 1 或 0。

如果我使用 stringConverter.FromBytes(parameters["p7"].Value 我总是收到 1。

  ProgramParameters parameters = new ProgramParameters();
                parameters.Append("P1", cwbrcParameterTypeEnum.cwbrcInout, 3);
                parameters["P1"].Value = stringConverter.ToBytes(uwDecision.Param1.PadRight(paramLength, ' '));
                parameters.Append("P2", cwbrcParameterTypeEnum.cwbrcInput, 10);
                parameters["P2"].Value = stringConverter.ToBytes(uwDecision.Param2.PadRight(parmlenth2, ' '));
                parameters.Append("P3", cwbrcParameterTypeEnum.cwbrcInput, 10);
                parameters["P3"].Value = stringConverter.ToBytes(uwDecision.Param3.ToUpper().PadRight(parmlenth2, ' '));
                parameters.Append("P4", cwbrcParameterTypeEnum.cwbrcInput, 1);
                parameters["P4"].Value = stringConverter.ToBytes(uwDecision.Param4.PadRight(paramlength3, ' '));
                parameters.Append("P5", cwbrcParameterTypeEnum.cwbrcInput, 3);
                parameters["P5"].Value = stringConverter.ToBytes(uwDecision.Param5.PadRight(paramLength, ' '));
                parameters.Append("P6", cwbrcParameterTypeEnum.cwbrcInput, 3);
                parameters["P6"].Value = stringConverter.ToBytes(uwDecision.Param6.PadRight(paramLength, ' '));
                parameters.Append("P7", cwbrcParameterTypeEnum.cwbrcInout, 1);
                program.Call(parameters);


                var read = stringConverter.FromBytes(parameters["P7"].Value);

                isValid = read == "1";
                system.Disconnect(cwbcoServiceEnum.cwbcoServiceAll);

【问题讨论】:

  • 您应该读取一个字节,然后将其转换为所需的数据类型,在这种情况下,它似乎是一个布尔值。我敢打赌你可以使用 BitConverter.ToBoolean().
  • BitConverter.ToString(read) 返回 F1。它每次都返回 F1。
  • 读了多长时间?
  • @RossBush 字节数组的大小总是相同的 241
  • @LeonardoTrimarchi 我想是康索拉斯吧!

标签: c# rpg


【解决方案1】:

消息似乎使用了扩展二进制编码的十进制交换码。您将需要转换或翻译,但是,系统似乎正在尝试发送 0 和 1,只是在它的表示中。

EBCDIC Hex              EBCDIC Text        ASCII Translation
------------------    --------------     -----------------
       F1                    1                 241 = 0xF1
       F0                    0                 240 = 0xF0  

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多