來自于LCL和Lazarus Pascal,我正試圖將我的所有代碼轉換為Delphi Pascal。
有一行不作業,涉及BinToHex:
function BinStr2Hex(S: AnsiString): AnsiString。
var
i:整數。
begin
結果 := ''。
for i := 1 to Length(S)
do Result := Result AnsiLowerCase(BinToHex(Bytes(S[i]), 2) 。)
結束。
這拋出了一個未宣告的識別符號Bytes的錯誤(不知道如何將其寫成宣告?
如果我將其改為 TBytes,那么我將得到一個不同的錯誤--沒有可以用這些引數呼叫的'BixToHex'的多載版本。
我如何在Delphi 10.4中正確地寫這個?
。謝謝你。
uj5u.com熱心網友回復:
無論是Delphi還是FreePascal,都沒有Classes.BinToHex()的版本,需要兩個引數,或者有一個回傳值。 不僅如此,傳入的緩沖區大小是二進制位元組數,而不是六進制字符數,所以在對單個AnsiChar進行六進制編碼時,傳入2是毫無意義的。 所以,你展示的FreePascal代碼必須使用BinToHex()的自定義多載。
在任何情況下,以下任何一個Classes.BinToHex()的多載都可以被用來在Delphi中對一個AnsiString進行十六進制編碼:
procedure BinToHex( Buffer: PAnsiChar; Text: PWideChar; BufSize: Integer); overload。
procedure BinToHex(Buffer。PAnsiChar; Text: PAnsiChar; BufSize: Integer); overload;
procedure BinToHex(var Buffer; Text: PWideChar; BufSize: Integer); overload; inline;
procedure BinToHex(var Buffer; Text: PAnsiChar; BufSize: Integer); overload; inline;
procedure BinToHex(緩沖區。Pointer; Text: PWideChar; BufSize: Integer); overload; inline;
procedure BinToHex(緩沖區。Pointer; Text: PAnsiChar; BufSize: Integer); overload; inline;
例如:
uses.
System.Classes, System.AnsiStrings;
// 注意:我建議使用RawByeString來代替輸入。
function BinStr2Hex(S: AnsiString{RawByteString}): AnsiString。
begin
SetLength(Result, Length(S)*2)。
BinToHex(PAnsiChar(S), PAnsiChar(Result), Length(S))。
// or: BinToHex(S[1], PAnsiChar(Result), Length(S));/span>
//or: BinToHex(Pointer(S), PAnsiChar(Result), Length(S));/span>
Result := AnsiStrings.AnsiLowerCase(Result)。
end。
或者,如果你把Result改為(Unicode)String:
uses
System.Classes, System.SysUtils;
// 注意:我建議使用RawByeString來代替輸入...
function BinStr2Hex(S.AnsiString{RawByteString}): String。
begin
SetLength(Result, Length(S)*2)。
BinToHex(PAnsiChar(S), PChar(Result), Length(S))。
// or: BinToHex(S[1], PChar(Result), Length(S));
// or: BinToHex(Pointer(S), PChar(Result), Length(S));/span>
Result := SysUtils.AnsiLowerCase(Result)。
end。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316503.html
標籤:
上一篇:RESTDataSnap中的Content-Type回應對我不起作用
下一篇:將一個通用型別的變數轉換為字串
