Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

ansi to %hex   Найти похожие ветки 

 
Klopan ©   (2004-11-12 02:11) [0]

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


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

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


 
Defunct ©   (2004-11-12 02:57) [2]

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

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

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;


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

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

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;


 
SergP ©   (2004-11-12 03:08) [4]

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


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;



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
1-1100437814
JaVa73
2004-11-14 16:10
2004.11.28
Управление MS Outlook 2000


6-1092273550
piople
2004-08-12 05:19
2004.11.28
CGI + JavaScript


1-1100480011
Rosl
2004-11-15 03:53
2004.11.28
E файлы


3-1099323102
ceval
2004-11-01 18:31
2004.11.28
Подскажите как организовать фильтрацию при помоци Halcyon 6


10-1066399363
val_5
2003-10-17 18:02
2004.11.28
Развертывание 3-х звенн приложения