DELPHI2009字符转换,简单问题(200分)

  • 主题发起人 主题发起人 forall
  • 开始时间 开始时间
F

forall

Unregistered / Unconfirmed
GUEST, unregistred user!
{从字符串到十六进制的函数}
function StrToHex(str: string; AEncoding: TEncoding): string;
var
ss: TStringStream;
i: Integer;
begin
Result := '';
ss := TStringStream.Create(str, AEncoding);
for i := 0 to ss.Size - 1 do
Result := Result + Format('%.2x ', [ss.Bytes]);
ss.Free;
end;
memo中 ------> 6D 65 6D 6F D6 D0


反转函数怎么写呀?
6D 65 6D 6F D6 D0 -----------> memo中

另外如果我先要对其中的一些比方D6做运算怎么处理?
 
function HexCharToByte(const S:Char):Byte;
begin //将单个的Hex字符(大写)转换为Byte
if S<='9' then
Result:=Byte(S)-Byte('0')
else
Result:=Byte(S)-Byte('A')+10;
end;

function HexStrToStr(const Str:String):String;
var
pc,pc1,rpc:PChar;
Txt:String; //Build 132
begin
Result:='';
if Str='' then
exit;
Txt:=Str;
FastStrUpper(Txt); //转换为大写
if Length(Txt) mod 2>0 then //如果长度是奇数
Txt:=Copy(Txt,1,Length(Txt)-1)+'0'+Txt[Length(Txt)]; //在最后一个字符之前补0
SetLength(Result,Length(Txt) div 2);
pc:=@Txt[1];
rpc:=@Result[1];
while pc^>chr(0) do
begin
pc1:=pc+1; //由于字符串的长度为偶数,pc+1肯定有效
Byte(rpc^):=HexCharToByte(pc^)*16+HexCharToByte(pc1^);
Inc(pc,2);
Inc(rpc);
end;
end;

使用时,需要先将原字符串中的空格清除 StringReplace(Str,' ','',[rfReplaceAll])
然后再用HexStrToStr即可。

eg:
ShowMessage(HexStrToStr(StringReplace('34 56 5E ',' ','',[rfReplaceAll])));
 
FastStrUpper找不到?
 
Byte(rpc^):=HexCharToByte(pc^)*16+HexCharToByte(pc1^);出错!left size can't be assign to
delphi 2009下报错!D7据说没有问题,怎么处理呀?
 
晕就一个字。
 
后退
顶部