![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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);