Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.03 c