首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >十六进制到二进制转换

十六进制到二进制转换
EN

Stack Overflow用户
提问于 2012-03-24 18:30:20
回答 2查看 12.7K关注 0票数 2

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

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

比如:

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

编辑:

代码语言:javascript
复制
Var 
  myfileHex := 'FAA4F4AAA444444'; // long as HEX code of my JPEG 

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-25 20:11:43

德尔福已经有了HexToBin (Classes)程序,至少从D5开始。

试试下面的代码:

代码语言:javascript
复制
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,也可以这样做。

票数 11
EN

Stack Overflow用户

发布于 2012-03-25 19:21:00

十六进制很容易手动解码:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9854336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档