HexStrToStream

function HexStrToStream(AHexStr: String;AStream: TStream):Boolean;
var
  iLen: Integer;
  Buff: String;
  P1,P2: PChar;
  B: Byte;
begin
  Result := False;
  if Not Assigned(AStream) then Exit;
  iLen := Length(AHexStr);
  if iLen = 0 then Exit;
  if (iLen mod 2) <> 0 then Exit;
  SetString(Buff,Nil,iLen div 2);
  P1 := PChar(AHexStr);
  P2 := PChar(Buff);
  while iLen > 0 do begin
    if P1^ in ['0'..'9'] then
      B := Ord(P1^) - Ord('0')
    else if P1^ in ['A'..'F'] then
      B := Ord(P1^) - Ord('A') + 10
    else if P1^ in ['a','f'] then 
      B := Ord(P1^) - Ord('a') + 10
    else 
      Exit;    
    B := B shl 4;
    Inc(P1);
    Dec(iLen);
    if P1^ in ['0'..'9'] then
      B := B + Ord(P1^) - Ord('0')
    else if P1^ in ['A'..'F'] then
      B := B + Ord(P1^) - Ord('A') + 10
    else if P1^ in ['a','f'] then 
      B := B + Ord(P1^) - Ord('a') + 10
    else 
      Exit; 
    Inc(P1);
    Dec(iLen);
    P2^ := Chr(B);
    Inc(P2);
  end;
  AStream.WriteBuffer(PChar(Buff)^, Length(Buff));
  Result := True;
end;

你可能感兴趣的:(Stream)