EBCDIC <-> ASCII 相互変換

機能:

 EBCDIC コードと ASCII コードを相互に変換します。


解説:

 テーブルを使用して、単純にコード変換を行っています。


ソースについて:

 Unit になっています。コピーして "ebcdic.pas" の名前で保存して下さい。こんなもんですかね。つーか、これ以上シンプルにできない気が...(^^;


ソースコード:

unit ebcdic;

interface

function Ascii2Ebcdic(const s: AnsiString): AnsiString;
function Ebcdic2Ascii(const s: AnsiString): AnsiString;

implementation

const
  ATOE_TABLE: array [0..255] of Byte =
    (
      $00, $01, $02, $03, $37, $2d, $2e, $2f, $16, $05, $25, $0b, $0c, $0d, $0e, $0f,
      $10, $11, $12, $13, $3c, $3d, $32, $26, $18, $19, $3f, $27, $1c, $1d, $1e, $1f,
      $40, $4f, $7f, $7b, $5b, $6c, $50, $7d, $4d, $5d, $5c, $4e, $6b, $60, $4b, $61,
      $f0, $f1, $f2, $f3, $f4, $f5, $f6, $f7, $f8, $f9, $7a, $5e, $4c, $7e, $6e, $6f,
      $7c, $c1, $c2, $c3, $c4, $c5, $c6, $c7, $c8, $c9, $d1, $d2, $d3, $d4, $d5, $d6,
      $d7, $d8, $d9, $e2, $e3, $e4, $e5, $e6, $e7, $e8, $e9, $4a, $e0, $5a, $5f, $6d,
      $79, $81, $82, $83, $84, $85, $86, $87, $88, $89, $91, $92, $93, $94, $95, $96,
      $97, $98, $99, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $a9, $c0, $6a, $d0, $a1, $07,
      $20, $21, $22, $23, $24, $15, $06, $17, $28, $29, $2a, $2b, $2c, $09, $0a, $1b,
      $30, $31, $1a, $33, $34, $35, $36, $08, $38, $39, $3a, $3b, $04, $14, $3e, $e1,
      $41, $42, $43, $44, $45, $46, $47, $48, $49, $51, $52, $53, $54, $55, $56, $57,
      $58, $59, $62, $63, $64, $65, $66, $67, $68, $69, $70, $71, $72, $73, $74, $75,
      $76, $77, $78, $80, $8a, $8b, $8c, $8d, $8e, $8f, $90, $9a, $9b, $9c, $9d, $9e,
      $9f, $a0, $aa, $ab, $ac, $ad, $ae, $af, $b0, $b1, $b2, $b3, $b4, $b5, $b6, $b7,
      $b8, $b9, $ba, $bb, $bc, $bd, $be, $bf, $ca, $cb, $cc, $cd, $ce, $cf, $da, $db,
      $dc, $dd, $de, $df, $ea, $eb, $ec, $ed, $ee, $ef, $fa, $fb, $fc, $fd, $fe, $ff
    );

  ETOA_TABLE: array [0..255] of Byte =
    (
      $00, $01, $02, $03, $9c, $09, $86, $7f, $97, $8d, $8e, $0b, $0c, $0d, $0e, $0f,
      $10, $11, $12, $13, $9d, $85, $08, $87, $18, $19, $92, $8f, $1c, $1d, $1e, $1f,
      $80, $81, $82, $83, $84, $0a, $17, $1b, $88, $89, $8a, $8b, $8c, $05, $06, $07,
      $90, $91, $16, $93, $94, $95, $96, $04, $98, $99, $9a, $9b, $14, $15, $9e, $1a,
      $20, $a0, $a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8, $5b, $2e, $3c, $28, $2b, $21,
      $26, $a9, $aa, $ab, $ac, $ad, $ae, $af, $b0, $b1, $5d, $24, $2a, $29, $3b, $5e,
      $2d, $2f, $b2, $b3, $b4, $b5, $b6, $b7, $b8, $b9, $7c, $2c, $25, $5f, $3e, $3f,
      $ba, $bb, $bc, $bd, $be, $bf, $c0, $c1, $c2, $60, $3a, $23, $40, $27, $3d, $22,
      $c3, $61, $62, $63, $64, $65, $66, $67, $68, $69, $c4, $c5, $c6, $c7, $c8, $c9,
      $ca, $6a, $6b, $6c, $6d, $6e, $6f, $70, $71, $72, $cb, $cc, $cd, $ce, $cf, $d0,
      $d1, $7e, $73, $74, $75, $76, $77, $78, $79, $7a, $d2, $d3, $d4, $d5, $d6, $d7,
      $d8, $d9, $da, $db, $dc, $dd, $de, $df, $e0, $e1, $e2, $e3, $e4, $e5, $e6, $e7,
      $7b, $41, $42, $43, $44, $45, $46, $47, $48, $49, $e8, $e9, $ea, $eb, $ec, $ed,
      $7d, $4a, $4b, $4c, $4d, $4e, $4f, $50, $51, $52, $ee, $ef, $f0, $f1, $f2, $f3,
      $5c, $9f, $53, $54, $55, $56, $57, $58, $59, $5a, $f4, $f5, $f6, $f7, $f8, $f9,
      $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $fa, $fb, $fc, $fd, $fe, $ff
    );

function Ascii2Ebcdic(const s: AnsiString): AnsiString;
var
  i:Integer;
begin
  result := '';
  for i:=1 to Length(s) do
    result := result + AnsiChar(ATOE_TABLE[Byte(s[i])]);
end;

function Ebcdic2Ascii(const s: AnsiString): AnsiString;
var
  i:Integer;
begin
  result := '';
  for i:=1 to Length(s) do
    result := result + AnsiChar(ETOA_TABLE[Byte(s[i])]);
end;

end.

 BACK