RPGLE 中的字符值到十进制数据类型
Char value to decimal data type in RPGLE
为什么当我发送一个 char(CL) 值到 decimal 数据类型时被转换为 (-33)?
我写了(移动'CL' NmOfField)
NmOfField 是十进制数据类型,所以我发现 NmOfField 上的值是 (-33)
我想知道具体为什么是 (-33)?
这与 'CL' 的十六进制表示是 X'C3D3' 以及 NmOfField 是压缩十进制类型有关。
假设它是一个packed(3:0)并且它在移动之前的值为0。'CL'中的每一对半字节都是一个数字,所以绝对值为33,倒数第二个半字节被认为是符号,并且在压缩十进制中 D 是负数,因此 NmOfField 的十六进制表示是 X'033D',数值是 -33。如果 NmOfField 值在移动之前为 +123 (X'123F'),则在 (X'133D') 之后为 -133,因为 'CL' 只有两个字符长(从右向左移动直到没有结果中有更多空间,或者因子 2 中没有更多字符)。如果数字半字节之一不是十进制数字,则会引发错误。
你应该避免使用 move* 运算符,因为那种意外和其他一些,并且更喜欢 free-form 列出的语法 here
为什么当我发送一个 char(CL) 值到 decimal 数据类型时被转换为 (-33)? 我写了(移动'CL' NmOfField) NmOfField 是十进制数据类型,所以我发现 NmOfField 上的值是 (-33) 我想知道具体为什么是 (-33)?
这与 'CL' 的十六进制表示是 X'C3D3' 以及 NmOfField 是压缩十进制类型有关。
假设它是一个packed(3:0)并且它在移动之前的值为0。'CL'中的每一对半字节都是一个数字,所以绝对值为33,倒数第二个半字节被认为是符号,并且在压缩十进制中 D 是负数,因此 NmOfField 的十六进制表示是 X'033D',数值是 -33。如果 NmOfField 值在移动之前为 +123 (X'123F'),则在 (X'133D') 之后为 -133,因为 'CL' 只有两个字符长(从右向左移动直到没有结果中有更多空间,或者因子 2 中没有更多字符)。如果数字半字节之一不是十进制数字,则会引发错误。
你应该避免使用 move* 运算符,因为那种意外和其他一些,并且更喜欢 free-form 列出的语法 here