2012-03-24 24 views
2

Ich habe meine JPEG-Datei als HEX-Code über Hex-Konverter konvertiert.Hex zu Binär konvertieren

Jetzt, wie dieses Hex in binäre konvertieren und als Jpeg Datei auf der Festplatte speichern.

Like:

var als Hex-Code deklariert und dann diese var Hex-Code in binäre und speichern auf der Festplatte konvertieren?

Edit:

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

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

Ihre Frage ist nicht klar. Beispiele wären sehr hilfreich. Welchen "hex converter" verwendest du? Wie sieht die Ausgabe des Konverters aus? –

+0

Binär-Datei zu Hex-codiert Ascii-Datei Link http://www.csoft.co.uk/hex_converter/index.htm – user1023395

+2

Umwandlung in eine Hex-Zeichenfolge ist wirklich bizarr. Ich kann mir keinen Grund vorstellen, warum Sie das tun würden. Hast du irgendwo einen Fehler? –

Antwort

10

Delphi hat bereits HexToBin (Classes) Verfahren, da mindestens D5.
Versuchen Sie diesen Code:

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; 

das gleiche mit jedem binären TStream zum Beispiel getan werden könnte, TFileStream.

2

Hex ist sehr einfach manuell zu entschlüsseln:

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; 
+6

Ist in D7 kein HexToBin eingebaut? –

+3

Ja, hat es. ;) – NGLN

+3

Sicher, aber wo ist der Spaß dabei? :-) –