由於%獲取的編碼爲%25你應該能夠挑出來的字符串,改變他們回到他們的代表性人物。
要做到這一點,你需要使用正/ PosEx的STR找到%和之後拉出2個數字(我想它總是2)
這是從我的頭頂,如果沒有編譯/參數的順序錯誤等,我們表示道歉。這應該足以給你一個總體思路。
function GetNextHex(InStr:String;var Position:Integer):String;
var
NextHex: Integer;
begin
NextHex := PosEx('%', InStr, Position);
if (NextHex > -1) then
Result := Copy(InStr, NextHex, 3)
else
Result := '';
Position := NextHex;
end;
要更改十六進制字符,交換%爲$和使用StrToInt
然後你就可以用根據自己的喜好Char
或Chr
使用。
function PercentHexToInt(Hex: String):Integer;
var
str : string;
begin
if (Hex[1] <> '%') then Result := 0
else
begin
// Result := strtoint(StrToHex('$' + Copy(Hex, 1,2)));
str :=StringReplace(HEx,'%','',[rfReplaceAll,rfIgnoreCase]);
str:=trim(str);
Result := StrToInt(('$' +str));
end;
end;
有了這些,你應該能夠通過字符串替換十六進制掃描值
function ReplaceHexValues(Str: String):String;
var
Position:Integer;
HexValue:String;
IntValue:Integer;
CharValue:String;
begin
Position := 0;
while(Position > -1)
begin
HexValue := GetNextHex(Str, Position);
IntValue := PercentHexToInt(HexValue);
CharValue := Char(IntValue);
if (CharValue = #0) then break;
//Note that Position Currently contains the the start of the hex value in the string
Delete(Str, Position, 3);
Insert(CharValue,Str,Position);
end;
Result:=Str;
end;
確定,我得到的第一部分爲'StringReplace(Edit1.Text, '%25', '%',[rfReplaceAll,rfIgnoreCase]);'..可以你在第二部分告訴我更多? – psqluser
@psqluser見編輯。 –
謝謝你的代碼,但我如何減少'位置'在'ReplaceHexValues'?作爲'Position:= Position-1;'作爲它的無限循環。 我已經對代碼進行了一些修改,但 – psqluser