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..255of 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..255of 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