在我的Iseries (AS400)上,我有一个将字符EBCDIC转换为十六进制的命令,它工作得很好。
sprintf((char*)(codeHex),"%02X", input[loop]); 现在,我想做相反的命令,我的意思是..从十六进制代码,将其转换为字符EBCDIC,并将其移动到字符串char。我该怎么做呢?
现在我收到的信息格式是这样的:
char input[300] ="0x004C0x004F0x00430x004B0x00450x00440x0000...";
sprintf((char*)(VariableCharacterEBCDIC),"?..", input[loop]);致以敬意,
发布于 2019-11-22 23:49:19
与其构建您自己的函数,不如使用内置于OS的MI级别的函数。
Convert Hex to Character (CVTHC)
Convert Character to Hex (CVTCH)
它们可以很容易地从IBM上的任何语言调用,包括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,你需要传递几个字符指针和一个整数。我就是想不起extproc('cvthc')的C等价物
Player1st提供的edit -C原型
void cvthc(char* hexresult, char* charinp, int charnibbles);
void cvtch(char* charresult, char* hexinp, int hexlen);发布于 2019-11-26 23:04:24
C原型在QSYSINC/MIH,成员CVTCH和CVTHC中。
对于RPG,您需要编写自己的原型。
https://stackoverflow.com/questions/58995801
复制相似问题