我有这个命令,在我的Iseries(AS400(上将字符EBCDIC转换为十六进制,并且效果很好。
sprintf((char*)(codeHex),"%02X", input[loop]);
现在,我想执行相反的命令,我的意思是..从十六进制代码,将其转换为字符EBCDIC,并将其移动到字符串字符。我该怎么做?
现在我收到的信息具有以下格式:
char input[300] ="0x004C0x004F0x00430x004B0x00450x00440x0000...";
sprintf((char*)(VariableCharacterEBCDIC),"?..", input[loop]);
问候
与其构建自己的函数,不如使用操作系统 MI 级别内置的功能。
将十六进制转换为字符 (CVTHC(
将字符转换为十六进制 (CVTCH(
它们可以很容易地从 IBM i 上的任何语言(包括 C(调用。
请注意,命名/描述有点不稳定,这里有一个备忘单......
CVTHC - 转换为十六进制 'A' => 'C1'CVTCH - 转换为字符 'C1' => 'A'
RPGLE原型看起来像这样:
dcl-pr tohex extproc('cvthc');
hexresult char(65534) options(*varsize);
charinp char(32767) const options(*varsize);
charnibbles int(10) value;
end-pr;
dcl-pr fromhex extproc('cvtch');
charresult char(32767) options(*varsize);
hexinp char(65534) const options(*varsize);
hexlen int(10) value;
end-pr;
因此,对于 C,您将传递几个字符指针和一个整数。 我只是不记得 C 相当于extproc('cvthc')
编辑 - C 原型由玩家 1st 提供
void cvthc(char* hexresult, char* charinp, int charnibbles);
void cvtch(char* charresult, char* hexinp, int hexlen);
C原型在QSYSINC/MIH,成员CVTCH和CVTHC。
对于RPG,您需要编写自己的原型。