我已经在我的Iseries(AS400)上使用此命令将字符EBCDIC转换为十六进制,并且效果很好。
sprintf((char*)(codeHex),"%02X", input[loop]);
现在,我想执行相反的命令,我的意思是..从十六进制代码中,将其转换为字符EBCDIC,然后将其移至字符串char。我该怎么办?
现在我收到的信息具有以下格式:
char input[300] ="0x004C0x004F0x00430x004B0x00450x00440x0000...";
sprintf((char*)(VariableCharacterEBCDIC),"?..", input[loop]);
问候,
而不是构建自己的功能,为什么不使用操作系统的MI级别中内置的功能。
Convert Hex to Character (CVTHC)
Convert Character to Hex (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,您要传递几个char指针和一个整数。我只是不记得extproc('cvthc')
的C等效项>
edit-C原型由Player1st提供
void cvthc(char* hexresult, char* charinp, int charnibbles);
void cvtch(char* charresult, char* hexinp, int hexlen);
C原型在QSYSINC / MIH中,成员CVTCH和CVTHC。