摩斯电码 加密解密

发布时间 2023-10-23 14:04:11作者: williamlv
//摩斯电码 加密解密,不支持汉字

function MorseEncode(str: string): string;
const
  oldarr: array[0..54] of string = ('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',
                                    '1','2','3','4','5','6','7','8','9','0',
                                     '.',':',',',';','?','=', '''','/','!','-','_','"','(',')','$','&','@','+',' ');
  newarr: array[0..54] of string = ('.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..',
                                    '.----','..---','...--','....-','.....','-....','--...','---..','----.','-----',
                                    '.-.-.-','---...','--..--','-.-.-.','..--..','-...-','.----.','-..-.','-.-.--','-....-','..--.-','.-..-.','-.--.','-.--.-','...-..-','.-...','.--.-.','.-.-.',' ');
var
  strin: string;
  size: Integer;
  value: string;
  i,j: Integer;
begin
  strin := UpperCase(str);
  value := '';
  for i := 1 to Length(str) do
  begin
    size := -1;
    for j := 0 to High(oldarr) do
    begin
      if strin[i] = oldarr[j] then
      begin
        size := j;
        Break;
      end;
    end;
    if size >= 0 then
      value := value + newarr[size] + ' '
    else
      value := value + strin[i];
  end;
  Result := Trim(value);
end;

function MorseDecode(Code: string): string;
const
  oldarr: array[0..54] of string = ('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',
                                    '1','2','3','4','5','6','7','8','9','0',
                                     '.',':',',',';','?','=', '''','/','!','-','_','"','(',')','$','&','@','+',' ');
  newarr: array[0..54] of string = ('.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-','..-','...-','.--','-..-','-.--','--..',
                                    '.----','..---','...--','....-','.....','-....','--...','---..','----.','-----',
                                    '.-.-.-','---...','--..--','-.-.-.','..--..','-...-','.----.','-..-.','-.-.--','-....-','..--.-','.-..-.','-.--.','-.--.-','...-..-','.-...','.--.-.','.-.-.',' ');
var
  strarr: TStringList;
  size: Integer;
  value: string;
  i,j: Integer;
begin
  strarr := TStringList.Create;
  strarr.Delimiter := ' ';
  strarr.DelimitedText := Code;
  value := '';
  for i := 0 to strarr.Count-1 do
  begin
    size := -1;
    for j := 0 to High(newarr) do
    begin
      if strarr[i] = newarr[j] then
      begin
        size := j;
        Break;
      end;
    end;
    if size >= 0 then
      value := value + oldarr[size]
    else
      value := value + strarr[i];
  end;
  strarr.Free;
  Result := value;
end;