Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ansi to %hex


Klopan ©   (2004-11-12 02:11:00) 

нужно преобразовать символы не латинского алфавита в hex.
например = %ED%E0%EF%F0%E8%EC%E5%F0


SergP   (2004-11-12 03:08:00) [1]

Если придется преобразовывать сравнительно длинные строки, то ИМХО это должно быть лучше:


function AnsiToHex(const Src: String): String;
var
EndLen,i: Integer;
s: String;
begin
EndLen:=0;
SetLength(Result,Length(Src)*3);
for i := 1 to Length(Src) do
  begin
  inc (EndLen);
  If Src[i] in ['0'..'9','A'..'Z','a'..'z']
     then Result[EndLen]:=Src[i]
     else begin
          Result[EndLen] := '%';
          s := IntToHex(Ord(Src[i]),2);
          Move(s[1],Result[EndLen+1],2);
          inc (EndLen,2);
          end;
  end;
SetLength(Result,EndLen);
end;


Defunct   (2004-11-12 03:00:00) [2]

понял ваш вопрос, оказывается все еще проще:

procedure TForm1.Button7Click(Sender: TObject);
var
   S      : String;
   Result : String;
   I      : Integer;
begin
 Result := 'Hello world';

 For I:=1 To Length(Result) do
   S := S + '%' +IntToHex( Byte(Result[i]), 2 );

 ShowMessage('Bytes array: ' + S);

end;


Defunct   (2004-11-12 02:57:00) [3]

не совсем понял что вам нужно.

Вот преобразование, как я его понял:

Const
     DecimalCharSet : set of char = ['0'..'9'];
     HeximalCharSet : set of char = ['0'..'9','A'..'F'];

Function Hex2Int(St:ShortString):Integer;
Var
   I,W  : Integer;
   Sign : Boolean;
   S    : ShortString;
Begin
 W:=0; Sign:=False;
 if St[1]='-' Then
   begin
     Sign:=True;
     S:=Copy(St,2,Length(St)-1);
   end
 else
   S:=St;

 for I:=1 to Length(S) do
 begin
   W:=W*16;
   If S[i] in DecimalCharSet Then
      W:=W+Byte(S[i])-Byte('0')
   else
      W:=W+10+Byte(S[i])-Byte('A')
 end;

 if Sign then W:=-W;
 Hex2Int := W;
End;

function SeparatedHexStringToByteArray(Str: String): ShortString;
var
   i,j : integer;
   S   : String;
begin
 I := 1; J := 0;
 while i<Length(Str) do
 begin
    if Str[i] in HeximalCharSet then
    begin
      S := Str[i];
      if Str[i+1] in HeximalCharSet then
      begin
        inc(i);
        S := S + Str[i];
      end;
      Inc(j);
      Result[j] :=  Char(Hex2Int(S));
    end;
    Inc(i);
 end;
 Result[0] := Char(J);
end;

procedure TForm1.Button7Click(Sender: TObject);
var S:String;
   Result : ShortString;
   I : Integer;
begin
 S:='%ED%E0%EF%F0%E8%EC%E5%F0';

 Result := SeparatedHexStringToByteArray(S);

 S := '';
 For I:=1 To Length(Result) do
   S := S + IntToHex( Byte(Result[i]), 2 ) + ' ';

 ShowMessage('Bytes array: ' + S);

end;


Германн   (2004-11-12 02:38:00) [4]

StNew:='';
for i:=1 to Length(St) do StNew:=StNew+'%'+IntToHex(Ord(St[i]),2);


Наверх

Титульная страница Поиск, карта сайта Написать письмо