gpt4 book ai didi

delphi - 在 Delphi 2010 中将十六进制字符串转换为 ansisstring

转载 作者:行者123 更新时间:2023-12-03 15:24:23 26 4
gpt4 key购买 nike

我曾经在 Delphi 6 中使用这个函数将十六进制字符串转换为字符串:

const
testSign = '207F8060287F585054505357FFD55861';

function Hex2Dec(const data: string): byte;
var
nH1, nH2: byte;
begin
if data[1] in ['0' .. '9'] then
nH1 := strtoint(data[1])
else
nH1 := 9 + ord(data[1]) - 64;
if data[2] in ['0' .. '9'] then
nH2 := strtoint(data[2])
else
nH2 := 9 + ord(data[2]) - 64;
Result := nH1 * 16 + nH2;
end;

function HexStrToStr(const HexStr: string): string;
var
BufStr: string;
LenHex: Integer;
x, y: Integer;
begin
LenHex := Length(HexStr) div 2;
x := 1;
y := 0;
while y <> LenHex do
begin
Inc(y);
BufStr := BufStr + Chr(Hex2Dec(HexStr[x] + HexStr[x + 1]));
Inc(x, 2);
end;
Result := BufStr;
end;

现在我想在 Delphi 2010 中使用该函数。

const
testSign: AnsiString = '207F8060287F585054505357FFD55861';

function Hex2Dec(const data: ansistring): byte;
var
nH1, nH2: byte;
begin
if data[1] in ['0' .. '9'] then
nH1 := strtoint(data[1])
else
nH1 := 9 + ord(data[1]) - 64;
if data[2] in ['0' .. '9'] then
nH2 := strtoint(data[2])
else
nH2 := 9 + ord(data[2]) - 64;
Result := nH1 * 16 + nH2;
end;

function HexStrToStr(const HexStr: ansistring): ansistring;
var
BufStr: ansistring;
LenHex: Integer;
x, y: Integer;
begin
LenHex := Length(HexStr) div 2;
x := 1;
y := 0;
while y <> LenHex do
begin
Inc(y);
BufStr := BufStr + Chr(Hex2Dec(HexStr[x] + HexStr[x + 1]));
Inc(x, 2);
end;
Result := BufStr;
end;

D6 中第一个代码的输出:

' '#$7F'€`('#$7F'XPTPSWÿÕXa'

D2010 中第二个代码的输出:

' '#$7F#$0080'`('#$7F'XPTPSWÿÕXa'

如何修复 D2010 中的代码,使其能够产生与 D6 相同的结果?

最佳答案

除了其他人提供的解决方案外,您还可以使用内置函数:

function HexStrToStr(const HexStr: string): string;
var
tmp: AnsiString;
begin
Assert(not Odd(Length(HexStr)), 'HexToStr input length must be an even number');
SetLength(tmp, Length(HexStr) div 2);
HexToBin(PWideChar(HexStr), @tmp[1], Length(tmp));
result := tmp;
end;

此实现假设十六进制编码的字符串首先是 Ansistring。为了灵 active ,我建议改用 TBytes

关于delphi - 在 Delphi 2010 中将十六进制字符串转换为 ansisstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5209029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com