Skip to content

Instantly share code, notes, and snippets.

@joseporiol
Created January 21, 2014 14:47
Show Gist options
  • Save joseporiol/8541410 to your computer and use it in GitHub Desktop.
Save joseporiol/8541410 to your computer and use it in GitHub Desktop.
ASCII to EBCDIC
public class CharFormatConverter {
static byte[] ASCII2EBCDIC = new byte[256];
static byte[] EBCDIC2ASCII = new byte[256];
static {
ASCII2EBCDIC[0x00] = (byte) 0x00;
ASCII2EBCDIC[0x01] = (byte) 0x01;
ASCII2EBCDIC[0x02] = (byte) 0x02;
ASCII2EBCDIC[0x03] = (byte) 0x03;
ASCII2EBCDIC[0x04] = (byte) 0x37;
ASCII2EBCDIC[0x05] = (byte) 0x2D;
ASCII2EBCDIC[0x06] = (byte) 0x2E;
ASCII2EBCDIC[0x07] = (byte) 0x2F;
ASCII2EBCDIC[0x08] = (byte) 0x16;
ASCII2EBCDIC[0x09] = (byte) 0x05;
ASCII2EBCDIC[0x0A] = (byte) 0x25;
ASCII2EBCDIC[0x0B] = (byte) 0x0B;
ASCII2EBCDIC[0x0C] = (byte) 0x0C;
ASCII2EBCDIC[0x0D] = (byte) 0x0D;
ASCII2EBCDIC[0x0E] = (byte) 0x0E;
ASCII2EBCDIC[0x0F] = (byte) 0x0F;
ASCII2EBCDIC[0x10] = (byte) 0x10;
ASCII2EBCDIC[0x11] = (byte) 0x11;
ASCII2EBCDIC[0x12] = (byte) 0x12;
ASCII2EBCDIC[0x13] = (byte) 0x13;
ASCII2EBCDIC[0x14] = (byte) 0x3C;
ASCII2EBCDIC[0x15] = (byte) 0x3D;
ASCII2EBCDIC[0x16] = (byte) 0x32;
ASCII2EBCDIC[0x17] = (byte) 0x26;
ASCII2EBCDIC[0x18] = (byte) 0x18;
ASCII2EBCDIC[0x19] = (byte) 0x19;
ASCII2EBCDIC[0x1A] = (byte) 0x3F;
ASCII2EBCDIC[0x1B] = (byte) 0x27;
ASCII2EBCDIC[0x1C] = (byte) 0x1C;
ASCII2EBCDIC[0x1D] = (byte) 0x1D;
ASCII2EBCDIC[0x1E] = (byte) 0x1E;
ASCII2EBCDIC[0x1F] = (byte) 0x1F;
ASCII2EBCDIC[0x20] = (byte) 0x40;
ASCII2EBCDIC[0x21] = (byte) 0x4F;
ASCII2EBCDIC[0x22] = (byte) 0x7F;
ASCII2EBCDIC[0x23] = (byte) 0x7B;
ASCII2EBCDIC[0x24] = (byte) 0x5B;
ASCII2EBCDIC[0x25] = (byte) 0x6C;
ASCII2EBCDIC[0x26] = (byte) 0x50;
ASCII2EBCDIC[0x27] = (byte) 0x7D;
ASCII2EBCDIC[0x28] = (byte) 0x4D;
ASCII2EBCDIC[0x29] = (byte) 0x5D;
ASCII2EBCDIC[0x2A] = (byte) 0x5C;
ASCII2EBCDIC[0x2B] = (byte) 0x4E;
ASCII2EBCDIC[0x2C] = (byte) 0x6B;
ASCII2EBCDIC[0x2D] = (byte) 0x60;
ASCII2EBCDIC[0x2E] = (byte) 0x4B;
ASCII2EBCDIC[0x2F] = (byte) 0x61;
ASCII2EBCDIC[0x30] = (byte) 0xF0;
ASCII2EBCDIC[0x31] = (byte) 0xF1;
ASCII2EBCDIC[0x32] = (byte) 0xF2;
ASCII2EBCDIC[0x33] = (byte) 0xF3;
ASCII2EBCDIC[0x34] = (byte) 0xF4;
ASCII2EBCDIC[0x35] = (byte) 0xF5;
ASCII2EBCDIC[0x36] = (byte) 0xF6;
ASCII2EBCDIC[0x37] = (byte) 0xF7;
ASCII2EBCDIC[0x38] = (byte) 0xF8;
ASCII2EBCDIC[0x39] = (byte) 0xF9;
ASCII2EBCDIC[0x3A] = (byte) 0x7A;
ASCII2EBCDIC[0x3B] = (byte) 0x5E;
ASCII2EBCDIC[0x3C] = (byte) 0x4C;
ASCII2EBCDIC[0x3D] = (byte) 0x7E;
ASCII2EBCDIC[0x3E] = (byte) 0x6E;
ASCII2EBCDIC[0x3F] = (byte) 0x6F;
ASCII2EBCDIC[0x40] = (byte) 0x7C;
ASCII2EBCDIC[0x41] = (byte) 0xC1;
ASCII2EBCDIC[0x42] = (byte) 0xC2;
ASCII2EBCDIC[0x43] = (byte) 0xC3;
ASCII2EBCDIC[0x44] = (byte) 0xC4;
ASCII2EBCDIC[0x45] = (byte) 0xC5;
ASCII2EBCDIC[0x46] = (byte) 0xC6;
ASCII2EBCDIC[0x47] = (byte) 0xC7;
ASCII2EBCDIC[0x48] = (byte) 0xC8;
ASCII2EBCDIC[0x49] = (byte) 0xC9;
ASCII2EBCDIC[0x4A] = (byte) 0xD1;
ASCII2EBCDIC[0x4B] = (byte) 0xD2;
ASCII2EBCDIC[0x4C] = (byte) 0xD3;
ASCII2EBCDIC[0x4D] = (byte) 0xD4;
ASCII2EBCDIC[0x4E] = (byte) 0xD5;
ASCII2EBCDIC[0x4F] = (byte) 0xD6;
ASCII2EBCDIC[0x50] = (byte) 0xD7;
ASCII2EBCDIC[0x51] = (byte) 0xD8;
ASCII2EBCDIC[0x52] = (byte) 0xD9;
ASCII2EBCDIC[0x53] = (byte) 0xE2;
ASCII2EBCDIC[0x54] = (byte) 0xE3;
ASCII2EBCDIC[0x55] = (byte) 0xE4;
ASCII2EBCDIC[0x56] = (byte) 0xE5;
ASCII2EBCDIC[0x57] = (byte) 0xE6;
ASCII2EBCDIC[0x58] = (byte) 0xE7;
ASCII2EBCDIC[0x59] = (byte) 0xE8;
ASCII2EBCDIC[0x5A] = (byte) 0xE9;
ASCII2EBCDIC[0x5B] = (byte) 0x4A;
ASCII2EBCDIC[0x5C] = (byte) 0xE0;
ASCII2EBCDIC[0x5D] = (byte) 0x5A;
ASCII2EBCDIC[0x5E] = (byte) 0x5F;
ASCII2EBCDIC[0x5F] = (byte) 0x6D;
ASCII2EBCDIC[0x60] = (byte) 0x79;
ASCII2EBCDIC[0x61] = (byte) 0x81;
ASCII2EBCDIC[0x62] = (byte) 0x82;
ASCII2EBCDIC[0x63] = (byte) 0x83;
ASCII2EBCDIC[0x64] = (byte) 0x84;
ASCII2EBCDIC[0x65] = (byte) 0x85;
ASCII2EBCDIC[0x66] = (byte) 0x86;
ASCII2EBCDIC[0x67] = (byte) 0x87;
ASCII2EBCDIC[0x68] = (byte) 0x88;
ASCII2EBCDIC[0x69] = (byte) 0x89;
ASCII2EBCDIC[0x6A] = (byte) 0x91;
ASCII2EBCDIC[0x6B] = (byte) 0x92;
ASCII2EBCDIC[0x6C] = (byte) 0x93;
ASCII2EBCDIC[0x6D] = (byte) 0x94;
ASCII2EBCDIC[0x6E] = (byte) 0x95;
ASCII2EBCDIC[0x6F] = (byte) 0x96;
ASCII2EBCDIC[0x70] = (byte) 0x97;
ASCII2EBCDIC[0x71] = (byte) 0x98;
ASCII2EBCDIC[0x72] = (byte) 0x99;
ASCII2EBCDIC[0x73] = (byte) 0xA2;
ASCII2EBCDIC[0x74] = (byte) 0xA3;
ASCII2EBCDIC[0x75] = (byte) 0xA4;
ASCII2EBCDIC[0x76] = (byte) 0xA5;
ASCII2EBCDIC[0x77] = (byte) 0xA6;
ASCII2EBCDIC[0x78] = (byte) 0xA7;
ASCII2EBCDIC[0x79] = (byte) 0xA8;
ASCII2EBCDIC[0x7A] = (byte) 0xA9;
ASCII2EBCDIC[0x7B] = (byte) 0xC0;
ASCII2EBCDIC[0x7C] = (byte) 0x6A;
ASCII2EBCDIC[0x7D] = (byte) 0xD0;
ASCII2EBCDIC[0x7E] = (byte) 0xA1;
ASCII2EBCDIC[0x7F] = (byte) 0x07;
ASCII2EBCDIC[0x80] = (byte) 0x20;
ASCII2EBCDIC[0x81] = (byte) 0x21;
ASCII2EBCDIC[0x82] = (byte) 0x22;
ASCII2EBCDIC[0x83] = (byte) 0x23;
ASCII2EBCDIC[0x84] = (byte) 0x24;
ASCII2EBCDIC[0x85] = (byte) 0x15;
ASCII2EBCDIC[0x86] = (byte) 0x06;
ASCII2EBCDIC[0x87] = (byte) 0x17;
ASCII2EBCDIC[0x88] = (byte) 0x28;
ASCII2EBCDIC[0x89] = (byte) 0x29;
ASCII2EBCDIC[0x8A] = (byte) 0x2A;
ASCII2EBCDIC[0x8B] = (byte) 0x2B;
ASCII2EBCDIC[0x8C] = (byte) 0x2C;
ASCII2EBCDIC[0x8D] = (byte) 0x09;
ASCII2EBCDIC[0x8E] = (byte) 0x0A;
ASCII2EBCDIC[0x8F] = (byte) 0x1B;
ASCII2EBCDIC[0x90] = (byte) 0x30;
ASCII2EBCDIC[0x91] = (byte) 0x31;
ASCII2EBCDIC[0x92] = (byte) 0x1A;
ASCII2EBCDIC[0x93] = (byte) 0x33;
ASCII2EBCDIC[0x94] = (byte) 0x34;
ASCII2EBCDIC[0x95] = (byte) 0x35;
ASCII2EBCDIC[0x96] = (byte) 0x36;
ASCII2EBCDIC[0x97] = (byte) 0x08;
ASCII2EBCDIC[0x98] = (byte) 0x38;
ASCII2EBCDIC[0x99] = (byte) 0x39;
ASCII2EBCDIC[0x9A] = (byte) 0x3A;
ASCII2EBCDIC[0x9B] = (byte) 0x3B;
ASCII2EBCDIC[0x9C] = (byte) 0x04;
ASCII2EBCDIC[0x9D] = (byte) 0x14;
ASCII2EBCDIC[0x9E] = (byte) 0x3E;
ASCII2EBCDIC[0x9F] = (byte) 0xE1;
ASCII2EBCDIC[0xA0] = (byte) 0x41;
ASCII2EBCDIC[0xA1] = (byte) 0x42;
ASCII2EBCDIC[0xA2] = (byte) 0x43;
ASCII2EBCDIC[0xA3] = (byte) 0x44;
ASCII2EBCDIC[0xA4] = (byte) 0x45;
ASCII2EBCDIC[0xA5] = (byte) 0x46;
ASCII2EBCDIC[0xA6] = (byte) 0x47;
ASCII2EBCDIC[0xA7] = (byte) 0x48;
ASCII2EBCDIC[0xA8] = (byte) 0x49;
ASCII2EBCDIC[0xA9] = (byte) 0x51;
ASCII2EBCDIC[0xAA] = (byte) 0x52;
ASCII2EBCDIC[0xAB] = (byte) 0x53;
ASCII2EBCDIC[0xAC] = (byte) 0x54;
ASCII2EBCDIC[0xAD] = (byte) 0x55;
ASCII2EBCDIC[0xAE] = (byte) 0x56;
ASCII2EBCDIC[0xAF] = (byte) 0x57;
ASCII2EBCDIC[0xB0] = (byte) 0x58;
ASCII2EBCDIC[0xB1] = (byte) 0x59;
ASCII2EBCDIC[0xB2] = (byte) 0x62;
ASCII2EBCDIC[0xB3] = (byte) 0x63;
ASCII2EBCDIC[0xB4] = (byte) 0x64;
ASCII2EBCDIC[0xB5] = (byte) 0x65;
ASCII2EBCDIC[0xB6] = (byte) 0x66;
ASCII2EBCDIC[0xB7] = (byte) 0x67;
ASCII2EBCDIC[0xB8] = (byte) 0x68;
ASCII2EBCDIC[0xB9] = (byte) 0x69;
ASCII2EBCDIC[0xBA] = (byte) 0x70;
ASCII2EBCDIC[0xBB] = (byte) 0x71;
ASCII2EBCDIC[0xBC] = (byte) 0x72;
ASCII2EBCDIC[0xBD] = (byte) 0x73;
ASCII2EBCDIC[0xBE] = (byte) 0x74;
ASCII2EBCDIC[0xBF] = (byte) 0x75;
ASCII2EBCDIC[0xC0] = (byte) 0x76;
ASCII2EBCDIC[0xC1] = (byte) 0x77;
ASCII2EBCDIC[0xC2] = (byte) 0x78;
ASCII2EBCDIC[0xC3] = (byte) 0x80;
ASCII2EBCDIC[0xC4] = (byte) 0x8A;
ASCII2EBCDIC[0xC5] = (byte) 0x8B;
ASCII2EBCDIC[0xC6] = (byte) 0x8C;
ASCII2EBCDIC[0xC7] = (byte) 0x8D;
ASCII2EBCDIC[0xC8] = (byte) 0x8E;
ASCII2EBCDIC[0xC9] = (byte) 0x8F;
ASCII2EBCDIC[0xCA] = (byte) 0x90;
ASCII2EBCDIC[0xCB] = (byte) 0x9A;
ASCII2EBCDIC[0xCC] = (byte) 0x9B;
ASCII2EBCDIC[0xCD] = (byte) 0x9C;
ASCII2EBCDIC[0xCE] = (byte) 0x9D;
ASCII2EBCDIC[0xCF] = (byte) 0x9E;
ASCII2EBCDIC[0xD0] = (byte) 0x9F;
ASCII2EBCDIC[0xD1] = (byte) 0xA0;
ASCII2EBCDIC[0xD2] = (byte) 0xAA;
ASCII2EBCDIC[0xD3] = (byte) 0xAB;
ASCII2EBCDIC[0xD4] = (byte) 0xAC;
ASCII2EBCDIC[0xD5] = (byte) 0xAD;
ASCII2EBCDIC[0xD6] = (byte) 0xAE;
ASCII2EBCDIC[0xD7] = (byte) 0xAF;
ASCII2EBCDIC[0xD8] = (byte) 0xB0;
ASCII2EBCDIC[0xD9] = (byte) 0xB1;
ASCII2EBCDIC[0xDA] = (byte) 0xB2;
ASCII2EBCDIC[0xDB] = (byte) 0xB3;
ASCII2EBCDIC[0xDC] = (byte) 0xB4;
ASCII2EBCDIC[0xDD] = (byte) 0xB5;
ASCII2EBCDIC[0xDE] = (byte) 0xB6;
ASCII2EBCDIC[0xDF] = (byte) 0xB7;
ASCII2EBCDIC[0xE0] = (byte) 0xB8;
ASCII2EBCDIC[0xE1] = (byte) 0xB9;
ASCII2EBCDIC[0xE2] = (byte) 0xBA;
ASCII2EBCDIC[0xE3] = (byte) 0xBB;
ASCII2EBCDIC[0xE4] = (byte) 0xBC;
ASCII2EBCDIC[0xE5] = (byte) 0xBD;
ASCII2EBCDIC[0xE6] = (byte) 0xBE;
ASCII2EBCDIC[0xE7] = (byte) 0xBF;
ASCII2EBCDIC[0xE8] = (byte) 0xCA;
ASCII2EBCDIC[0xE9] = (byte) 0xCB;
ASCII2EBCDIC[0xEA] = (byte) 0xCC;
ASCII2EBCDIC[0xEB] = (byte) 0xCD;
ASCII2EBCDIC[0xEC] = (byte) 0xCE;
ASCII2EBCDIC[0xED] = (byte) 0xCF;
ASCII2EBCDIC[0xEE] = (byte) 0xDA;
ASCII2EBCDIC[0xEF] = (byte) 0xDB;
ASCII2EBCDIC[0xF0] = (byte) 0xDC;
ASCII2EBCDIC[0xF1] = (byte) 0xDD;
ASCII2EBCDIC[0xF2] = (byte) 0xDE;
ASCII2EBCDIC[0xF3] = (byte) 0xDF;
ASCII2EBCDIC[0xF4] = (byte) 0xEA;
ASCII2EBCDIC[0xF5] = (byte) 0xEB;
ASCII2EBCDIC[0xF6] = (byte) 0xEC;
ASCII2EBCDIC[0xF7] = (byte) 0xED;
ASCII2EBCDIC[0xF8] = (byte) 0xEE;
ASCII2EBCDIC[0xF9] = (byte) 0xEF;
ASCII2EBCDIC[0xFA] = (byte) 0xFA;
ASCII2EBCDIC[0xFB] = (byte) 0xFB;
ASCII2EBCDIC[0xFC] = (byte) 0xFC;
ASCII2EBCDIC[0xFD] = (byte) 0xFD;
ASCII2EBCDIC[0xFE] = (byte) 0xFE;
ASCII2EBCDIC[0xFF] = (byte) 0xFF;
// Use the current table to create the reverse conversion table.
for (int i = 0; i < 256; ++i) {
EBCDIC2ASCII[ASCII2EBCDIC[i] & 0xFF] = (byte) i;
}
}
private byte convertByteA2E(byte in) {
return ASCII2EBCDIC[in & 0xFF];
}
public byte[] convertStrToEBCDIC(byte[] in) {
if (in != null) {
byte[] out = new byte[in.length];
for (int i = 0; i < in.length; ++i) {
out[i] = convertByteA2E(in[i]);
}
return out;
}
return null;
}
public String toHex(byte[] in) {
StringBuffer sb = new StringBuffer(6 * in.length);
if (in != null) {
for (int i = 0; i < in.length; ++i) {
sb.append("0x" + Integer.toHexString(in[i] & 0xFF)
+ ((i == in.length - 1) ? "." : ", "));
}
return sb.toString();
}
return null;
}
public static void main(String args[]) {
CharFormatConverter cfc = new CharFormatConverter();
byte[] ebcdicBytes = { (byte) 0xE3, (byte) 0x88, (byte) 0x89,
(byte) 0xA2, (byte) 0x40, (byte) 0x89, (byte) 0xa2,
(byte) 0x40, (byte) 0xc5, (byte) 0xc2, (byte) 0xc3,
(byte) 0xc4, (byte) 0xc9, (byte) 0xc3, (byte) 0x7a,
(byte) 0x40, (byte) 0xf3, (byte) 0x4b, (byte) 0xf1,
(byte) 0xf4, (byte) 0xf2 };
String asciiString = "This is an ASCII String: 1.1618";
byte[] asciiByte = asciiString.getBytes();
// byte[] fromEDCDIC = cfc.convertStrToASCII(ebcdicBytes);
byte[] fromASCII = cfc.convertStrToEBCDIC(asciiByte);
System.out.println("ASCII: " + asciiString + "\nIn EBCDIC: "
+ cfc.toHex(fromASCII));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment