使用按位运算将HEX转换为字符

时间:2016-11-14 13:57:31

标签: hex character bitwise-operators ibm-midrange rpg

说我在十六进制xxx中得到了这个值007800780078 如何使用按位运算将十六进制值转换回字符? 我可以吗?

1 个答案:

答案 0 :(得分:2)

我认为你可以使用“按位”操作来执行它,但它可能是一个可怕的代码混乱,并且完全没有必要,因为ILE RPG可以使用适当的内置代码轻松完成在功能。

首先,您并不完全具有通常认为的“十六进制”值。也就是说,您显示的是值的十六进制表示形式;但基本的“十六进制”转换不会产生有用的结果。您显示的内容似乎是“xxx”的UCS-2值。

这是一个简单的例子,显示了将该十六进制字符串转换为标准字符值:

 d                 ds
 d charField                      6    inz( x'007800780078' )
 d UCSField1                      3c   overlay( charField )

 d TargetField     s              6
 d Length          s             10i 0

  /free
    Length = %len( %trim( UCSField1 ));
    TargetField = %trim( %char( UCSField1 ));

    *inlr = *on;
    return;
  /end-free

代码的DS包含两个子字段。第一个是简单的字符字段,声明初始化为x'007800780078'的六个字节的内存。第二个子字段被声明为数据类型“C”以指示UCS-2,并且它覆盖第一个子字段。因为它是UCS-2,所以它的大小为“3”,允许三个字符。 (每个字符都是16位宽。)

可执行语句不起作用,足以让您测试转换后的值。使用debug,您应该看到Length出现为(3)而TargetField变为'xxx'。

%CHAR()内置函数可用于将UCS-2转换为程序使用的字符编码。要向相反方向前进,请使用%UCS2()内置函数。