EBCDIC to ASCII Character Code Conversion

EBCDIC (Extended Binary Coded Decimal Interchange Code) is the data alphabet used in all IBM computers, except personal computers. A conversion routine that translates server responses from the EBCDIC character set to ASCII is easy to implement.

The function EBCDIC2ASC uses the code map defined by the array as EBCDIC_2_ASCII, which maps each EBCDIC character to its ASCII equivalent. The function ASC2EBCDIC, which is required for translating client requests from ASCII to EBCDIC, works in a similar manner.

var 
  asEBCDIC_2_ASCII : array[256] of string(1) INIT
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", "a", "b", "c", "d", "e", "f", "g", "h", "i", " ", " ", " ", " ", " ", " ", 
" ", "j", "k", "l", "m", "n", "o", "p", "q", "r", " ", " ", " ", " ", " ", " ", 
" ", "~", "s", "t", "u", "v", "w", "x", "y", "z", " ", " ", " ", " ", " ", " ", 
" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", 
" ", "A", "B", "C", "D", "E", "F", "G", "H", "I", " ", " ", " ", " ", " ", " ", 
" ", "J", "K", "L", "M", "N", "O", "P", "Q", "R", " ", " ", " ", " ", " ", " ", 
" ", " ", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", " ", " ", " ", " ", " ", 
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " ", " ", " ", " ", " ", " ";  
  
function EBCDIC2ASC(pEBCDIC: string; pMaxLen: number optional)
  var 
    i: number; 
  begin 
  // 
  if pMaxLen = 0 then 
     pMaxLen := Strlen(pEBCDIC);  
  // writeln("length of string : " + string(pMaxLen));
  end; 
  //                               
  // writeln("EBCDIC STRING " + pEBCDIC);
  //
  for i := 1 to pMaxLen do 
  //   
  //writeln("Ordinal Value:" + String(ord(pEBCDIC[i])));
  //write("Value From Array:" + asASCII_2_EBCDIC[ord(pEBCDIC[i]) + 1]);
    write(asEBCDIC_2_ASCII[ord(pEBCDIC[i]) + 1]);
  //writeln;
  //
  end; 
    writeln;
  end EBCDIC2ASC;

The table below is the standard EBCDIC table for the 2780/3780 Protocol code map (taken from [EBCDIC_CTI]). As an example, to decode the EBCDIC byte 0x83, choose row 8 and column 3. You'll find that 0x83 maps to the letter c in ASCII.

[EBCDIC_UNI] is a reference that presents the specifications of the UTF-EBCDIC - EBCDIC Friendly Unicode (or UCS) Transformation Format.