16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"SJIS <-> JIS 変換 簡易編"
この発言に対し以下のコメントが寄せられています
#00505 瑠瓏 さん RE:SJIS <-> JIS 変換 簡易編
この例は、入力がSJISとかJISだとわかっている場合の変換です。
function JisToSjis(
Jis: Word
): Word;
var
Ser: Word;
Sj1: Byte;
Sj2: Byte;
begin
Ser := (Trunc(Jis / 256) - $21) * 94 + (Jis mod 256) - $21;
Sj1 := Trunc(Ser / (63 + 125));
if (Sj1 < 31) then begin
Result := (Sj1 + $81) * 256;
end
else begin
Result := (Sj1 + $81 + $40) * 256;
end;
Sj2 := Ser mod (63 + 125);
if (Sj2 < 63) then begin
Result := Result + Sj2 + $40;
end
else begin
Result := Result + Sj2 + $40 + 1;
end;
end;
function SjisToJis(
Sjis: Word
): Word;
var
Ser: Word;
Sj1: Byte;
Sj2: Byte;
begin
Sj1 := Trunc(Sjis / 256);
if (Sj1 < $A0) then begin
Ser := (Sj1 - $81) * (63 + 125);
end
else begin
Ser := (Sj1 - $81 - $40) * (63 + 125);
end;
Sj2 := Sjis mod 256;
if (SJ2 < $80) then begin
Ser := Ser + Sj2 - $40;
end
else begin
Ser := Ser + Sj2 - $40 - 1;
end;
Result := (Trunc(Ser / 94) + $21) * 256 + (Ser mod 94) + $21;
end;
EUC(UJISとかJEUCとかいうらしい)では JIS + $8080、区・点では JIS -
$2020 でよかったと思いますが、よくわかりません。あと、新JIS、旧JISなどの
違いは、FJAMES というフォーラムにありましたが、最近行ってないのでわかり
ません。アセンブラで書かれた例もありました。
アイクビー
Original document by アイクビー 氏 ID:(KHB01350)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|