Главная страница
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.066 c
1-1100667952
Maxim2030
2004-11-17 08:05
2004.11.28
стандарты кодирования на Delphi


1-1100436459
Polycom
2004-11-14 15:47
2004.11.28
Код ASCII


1-1100183086
denis24
2004-11-11 17:24
2004.11.28
qrlabel.wordwrap


3-1099389815
kgb
2004-11-02 13:03
2004.11.28
Как построить запрос


3-1098811212
Sid
2004-10-26 21:20
2004.11.28
Обновление DBChart