十六进制到二进制转换

时间:2012-03-24 18:30:20

标签: delphi delphi-7

我已将我的jpeg文件转换为十六进制转换器的十六进制代码。

现在如何将该十六进制转换为二进制文件并将其保存为磁盘上的Jpeg文件。

像:

var声明为十六进制代码,然后将该var十六进制代码转换为二进制并保存在磁盘上?

修改

Var 
  myfileHex := 'FAA4F4AAA444444'; // long as HEX code of my JPEG 

function HexToBin(myfileHex): string;
begin    
  // Convert Hex to bin and save file as...
end; 

2 个答案:

答案 0 :(得分:10)

Delphi已经有HexToBinClasses)程序,因为至少D5 试试这段代码:

procedure HexStringToBin;
var
  BinaryStream: TMemoryStream;
  HexStr: AnsiString;
begin
  HexStr := 'FAA4F4AAA44444';
  BinaryStream := TMemoryStream.Create;
  try
    BinaryStream.Size := Length(HexStr) div 2;
    if BinaryStream.Size > 0 then
    begin
      HexToBin(PAnsiChar(HexStr), BinaryStream.Memory, BinaryStream.Size);
      BinaryStream.SaveToFile('c:\myfile.bin')
    end;
  finally
    BinaryStream.Free;
  end;
end;

对于任何二进制TStream,也可以这样做,例如TFileStream

答案 1 :(得分:2)

十六进制非常容易手动解码:

procedure HexToBin(const Hex: string; Stream: TStream);
var
  B: Byte;
  C: Char;
  Idx, Len: Integer;
begin
  Len := Length(Hex);
  If Len = 0 then Exit;
  If (Len mod 2) <> 0 then raise Exception.Create('bad hex length');
  Idx := 1;
  repeat
    C := Hex[Idx];
    case C of
      '0'..'9': B := Byte((Ord(C) - '0') shl 4);
      'A'..'F': B := Byte(((Ord(C) - 'A') + 10) shl 4);
      'a'..'f': B := Byte(((Ord(C) - 'a') + 10) shl 4);
    else
      raise Exception.Create('bad hex data'); 
    end; 
    C := Hex[Idx+1];
    case C of
      '0'..'9': B := B or Byte(Ord(C) - '0');
      'A'..'F': B := B or Byte((Ord(C) - 'A') + 10);
      'a'..'f': B := B or Byte((Ord(C) - 'a') + 10);
    else
      raise Exception.Create('bad hex data'); 
    end; 
    Stream.WriteBuffer(B, 1);
    Inc(Idx, 2);
  until Idx > Len;
end;

begin
  FStream := TFileStream.Create('myfile.jpg', fmCreate);
  HexToBin(myFileHex, FStream);
  FStream.Free;
end;