将十六进制EBCDIC转换为字符EBCDIC(iseries AS400)

问题描述 投票:1回答:2

我已经在我的Iseries(AS400)上使用此命令将字符EBCDIC转换为十六进制,并且效果很好。

sprintf((char*)(codeHex),"%02X", input[loop]);   

现在,我想执行相反的命令,我的意思是..从十六进制代码中,将其转换为字符EBCDIC,然后将其移至字符串char。我该怎么办?

现在我收到的信息具有以下格式:

char input[300] ="0x004C0x004F0x00430x004B0x00450x00440x0000..."; 
sprintf((char*)(VariableCharacterEBCDIC),"?..", input[loop]);

问候,

c ibm-midrange
2个回答
3
投票

而不是构建自己的功能,为什么不使用操作系统的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);

0
投票

C原型在QSYSINC / MIH中,成员CVTCH和CVTHC。

© www.soinside.com 2019 - 2024. All rights reserved.