2012-09-26 60 views
1

我正在使用Delphi 7應用程序和BDE(傳統軟件)。 從ODBC管理 每當密碼被更改/保存這樣的(例如,如果密碼是my,password從註冊表中讀取時將十六進制轉換爲字符串

enter image description here

它獲取在註冊表中保存爲my%2cpassword

enter image description here

而且我的應用程序讀取註冊表路徑

HKEY_CURRENT_USER \ SOFTWARE \ ODBC \ ODBC.INI \ MYSOURCE
密碼

然後使用密碼來執行PSQL命令,

"C:\Program Files (x86)\PostgreSQL\9.0\bin\psql.exe" -h localhost -p 5432 -d myDB -U myadmin -f "C:\Users\user\AppData\Roaming\ff.sql" 

由於現在密碼裏面有%2c而不是,,驗證失敗。 當我讀取密碼並寫入pgpass.conf文件。

如何將HEX字符與正常字符混合時將十六進制字符轉換爲正確的字符串?

回答

2

由於獲取的編碼爲%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然後你就可以用根據自己的喜好CharChr使用。

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; 
+0

確定,我得到的第一部分爲'StringReplace(Edit1.Text, '%25', '%',[rfReplaceAll,rfIgnoreCase]);'..可以你在第二部分告訴我更多? – psqluser

+0

@psqluser見編輯。 –

+0

謝謝你的代碼,但我如何減少'位置'在'ReplaceHexValues'?作爲'Position:= Position-1;'作爲它的無限循環。 我已經對代碼進行了一些修改,但 – psqluser

3

這似乎是字符串的一個簡單的URL編碼。

%2c在urlencoding中。簡單的使用網址解碼。

檢查出信息這太問題Standard URL encode function?

相關問題