如何把16进制文本存储的文本文件 转换成二进制文件 ( 积分: 150 )

  • 主题发起人 主题发起人 jingyi
  • 开始时间 开始时间
J

jingyi

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,
例如 文件a.txt的内容如下:
FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4(换行)
FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4
怎么转换成二进进为如下所示格式的
FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4FE40EB45A0B4
 
没明白你的意思,是不是要把中间的回车换行去掉?如果是这样,可以考虑这样实现:伪代码 a.txt:=stringreplace(a.txt, #13#10, '', [rfReplceall])
 
替换所有#13#10就是了。
 
相当于两个字符当一个字节内容
 
function HexToString(const Value: string): string;

function HexCharToByte(ch: Char): Byte; //更快的方法是直接建一个256字节的数组
begin
case ch of
'0'..'9': Result := Byte(ch) - Byte('0');
'a'..'f': Result := Byte(ch) - Byte('a') +10;
'A'..'F': Result := Byte(ch) - Byte('A') +10;
else Result := $FF;
end;
end;

var
i: Integer;
begin
SetLength(Result, Length(Value) div 2);
i := 1;
while i <= Length(Value) do begin
Result[i div 2 +1] := Char((HexCharToByte(Value) shl 4) +
HexCharToByte(Value[i +1]));
Inc(i, 2);
end;
end;
 
var
ls: Tstrings;
i,Len:integer;
s:string;
p:pchar;
begin

s:='';
ls:=TstringList.Create();
getMem(p,1024);
try
ls.LoadFromFile('C:/a.txt');
for i:= 0 to ls.Count-1 do
begin
Len := HexToBin(Pchar(ls),p,1024);
s:= s+ copy(p,0,Len);
end;

ShowMessage(s);
finally
ls.Free;
freeMem(p);
end;

end;
 
//转换十六进制字符串为字节串, 每两个有效字符对应一个字节,
//返回转换的字节长,有效字符 '0'..'9','a'..'f','A'..'F'
i, j: integer;
vByteValue: byte;
begin
Result := 0;
SetLength(aBytes, Length(aStr) div 2);
i := 1;
j := 0;
vByteValue := 0;
while i <= Length(aStr) do
begin
if not (aStr in ['0'..'9', 'a'..'f', 'A'..'F']) then
begin
inc(i);
continue;
end;
j := j mod 2;
if j = 0 then
vByteValue := GetHexValue(aStr) * 16
else
begin
vByteValue := vByteValue + GetHexValue(aStr);
aBytes[Result] := vByteValue;
inc(Result);
end;
inc(i);
inc(j);
end;
SetLength(aBytes, Result);
end;
 
多人接受答案了。
 
后退
顶部