使用按位运算将 HEX 转换为字符
Convert HEX to characters using bitwise operations
说我得到了这个十六进制值 xxx
007800780078
如何使用按位运算将十六进制值转换回字符?
可以吗?
我想你 可以 使用 "bitwise" 操作来完成它,但这可能是一团可怕的代码,而且完全没有必要,因为 ILE RPG 可以使用适当的内置函数轻松完成。
首先,您并不完全拥有通常认为的 "hex" 值。也就是说,您显示的是一个值的十六进制表示;但是基本的 "hex" 转换不会给出有用的结果。您显示的 似乎是 "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 位宽。)
可执行语句的作用不大,足以让您测试转换后的值。使用调试,您应该看到 Length 变为 (3) 并且 TargetField 变为 'xxx'.
%CHAR() 内置函数可用于将 UCS-2 转换为程序使用的字符编码。要朝相反的方向前进,请使用 %UCS2() 内置函数。
说我得到了这个十六进制值 xxx
007800780078
如何使用按位运算将十六进制值转换回字符?
可以吗?
我想你 可以 使用 "bitwise" 操作来完成它,但这可能是一团可怕的代码,而且完全没有必要,因为 ILE RPG 可以使用适当的内置函数轻松完成。
首先,您并不完全拥有通常认为的 "hex" 值。也就是说,您显示的是一个值的十六进制表示;但是基本的 "hex" 转换不会给出有用的结果。您显示的 似乎是 "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 位宽。)
可执行语句的作用不大,足以让您测试转换后的值。使用调试,您应该看到 Length 变为 (3) 并且 TargetField 变为 'xxx'.
%CHAR() 内置函数可用于将 UCS-2 转换为程序使用的字符编码。要朝相反的方向前进,请使用 %UCS2() 内置函数。