일단 아래처럼 만드니.. 문제가 없네요...
단 문제가 있다면.. 올려주신 hex 파일은 사용하지 않았다는 거구요.
bin 파일을 읽어서....hex 로 만들고...
그렇게 만들어진 hex 를 다시 bin 으로 만들고...
뭐 이런 겁니다.....
잘 사용하시기 바랍니다...
물론 이거보다 코드가 간단하고.. 이쁘게 만들수 있겠지만..
그냥 대충 만들어 봤습니다... 테스트 해도 잘돌아 가구요..
그럼 답이 됐으면 좋겠네요..
즐거운 프로그램 하세요..
// bin->hex
procedure TForm1.Button1Click(Sender: TObject);
var
fr_stream : TFileStream;
j : integer;
k : byte;
w_string : string;
fw : Tstringlist;
begin
if OpenDialog1.Execute then
begin
fr_stream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
fw := Tstringlist.Create;
while fr_stream.Position < fr_stream.Size do
begin
w_string:='';
for j:=0 to 15 do
begin
fr_stream.Read(k,1);
w_string:= w_string + inttohex(k,2);
end;
fw.Add(w_string);
end;
fr_stream.Free;
fw.SaveToFile(OpenDialog1.FileName + '.hex');
Showmessage('끝');
end;
end;
// hex ->bin
procedure TForm1.Button2Click(Sender: TObject);
var
fr : Tstringlist;
fw : TFileStream;
i,j : integer;
aa : array [0..15] of char;
begin
if OpenDialog1.Execute then
begin
fr := Tstringlist.Create;
fr.LoadFromFile(OpenDialog1.FileName);
fw := TFileStream.Create(OpenDialog1.FileName+'.bin',fmCreate or fmOpenWrite);
for i:=0 to fr.Count -1 do
begin
HexToBin(pchar(fr.Strings[i]),aa,16);
fw.Write(aa,16);
end;
fw.Free;
showmessage('끝');
end;
end;
대충 프로그램 Hex -> Bin은 만들었거든요
Bin -> Hex도 같은 방법으로 하면 됩니다.
OpenDialog, SaveDialog은 폼에다 집어넣고
버튼 하나 만들어서 이부분 붙여놓으세요
그럼 이만
var
SMS : TMemoryStream;
TMS : TMemoryStream;
TEMPMS : TMemoryStream;
P : Pchar;
i : integer;
begin
OpenDialog1.Filter := 'HEX files (*.hex)|*.hex';
if OpenDialog1.Execute then
begin
SMS := TMemoryStream.Create;
SMS.LoadFromFile(OpenDialog1.FileName);
SMS.Position := 0;
P := SMS.Memory;
TEMPMS := TMemoryStream.Create;
for i := 0 to SMS.Size - 1 do
if (P[i] in ['0'..'9']) Or (P[i] in ['A'..'F']) then
TEMPMS.Write(P[i], 1);
SMS.Free;
TEMPMS.Position := 0;
P := TEMPMS.Memory;
TMS := TMemoryStream.Create;
TMS.SetSize(TEMPMS.Size div 2);
TMS.Position := 0;
HextoBin(P, TMS.Memory, TMS.Size);
TMS.Position := 0;
SaveDialog1.Filter := 'BIN files (*.bin)|*.bin';
if SaveDialog1.Execute then
TMS.SaveToFile(SaveDialog1.FileName);
TMS.Free;
TempMS.Free;
end;
end;
단 문제가 있다면.. 올려주신 hex 파일은 사용하지 않았다는 거구요.
bin 파일을 읽어서....hex 로 만들고...
그렇게 만들어진 hex 를 다시 bin 으로 만들고...
뭐 이런 겁니다.....
잘 사용하시기 바랍니다...
물론 이거보다 코드가 간단하고.. 이쁘게 만들수 있겠지만..
그냥 대충 만들어 봤습니다... 테스트 해도 잘돌아 가구요..
그럼 답이 됐으면 좋겠네요..
즐거운 프로그램 하세요..
// bin->hex
procedure TForm1.Button1Click(Sender: TObject);
var
fr_stream : TFileStream;
j : integer;
k : byte;
w_string : string;
fw : Tstringlist;
begin
if OpenDialog1.Execute then
begin
fr_stream := TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
fw := Tstringlist.Create;
while fr_stream.Position < fr_stream.Size do
begin
w_string:='';
for j:=0 to 15 do
begin
fr_stream.Read(k,1);
w_string:= w_string + inttohex(k,2);
end;
fw.Add(w_string);
end;
fr_stream.Free;
fw.SaveToFile(OpenDialog1.FileName + '.hex');
Showmessage('끝');
end;
end;
// hex ->bin
procedure TForm1.Button2Click(Sender: TObject);
var
fr : Tstringlist;
fw : TFileStream;
i,j : integer;
aa : array [0..15] of char;
begin
if OpenDialog1.Execute then
begin
fr := Tstringlist.Create;
fr.LoadFromFile(OpenDialog1.FileName);
fw := TFileStream.Create(OpenDialog1.FileName+'.bin',fmCreate or fmOpenWrite);
for i:=0 to fr.Count -1 do
begin
HexToBin(pchar(fr.Strings[i]),aa,16);
fw.Write(aa,16);
end;
fw.Free;
showmessage('끝');
end;
end;