十六进制文件怎么保存?????????

misszhi 2005-11-03 03:55:26
procedure Tfrm_save.btn_saveClick(Sender: TObject);
var cn_file:TextFile; //这是文本文件格式,有没有16进制的文件格式????
s3:string;
s1:string;
begin
s3:='12345678';
AssignFile(Cn_file,'c:\diskinfo.sbj');
Reset(cn_file);
s1:=StrToHex(s3);
Rewrite(cn_file);
Writeln(cn_file,s1);
closefile(cn_file);
end;


function StrToHex(str:string):string;
var
I:Integer;
begin
for I:=1 to Length(str) do
begin
Result:=Result+IntToHex(Ord(str[i]),2);
end;
end;

保存完后怎样用ultraedit打开看到的十六进制不对啊??应该是00 BC 61 4E才对啊,怎么是
33 31 33 32 33 33 33 34 33 35 33 36 33 37 33 38啊???
...全文
335 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨轩居士 2005-11-04
  • 打赏
  • 举报
回复
你用无类型文件一切就可以解决了,或者用TFileStream这个类能更好的操作,你可以试一下
clasj 2005-11-04
  • 打赏
  • 举报
回复
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
s: string = '20051102';
tmp: string;
buf: array[0..3] of byte;
f: Integer;
i: integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
for i:=0 to 3 do
begin
tmp:=Copy(s, i*2+1, 2);
buf[i]:=StrToInt(Copy(tmp, 1, 1))*16+StrToInt(Copy(tmp, 2, 1));
end;
f:=FileCreate('1.txt');
FileWrite(f, buf, sizeof(buf));
readln;
end.
我不要昵称 2005-11-04
  • 打赏
  • 举报
回复
up
我不要昵称 2005-11-03
  • 打赏
  • 举报
回复
帮帮我吧
我不要昵称 2005-11-03
  • 打赏
  • 举报
回复
那么要求12345678保存成00 BC 61 4E,而20051102怎么原样保存进16进制文件呢?即20 05 11 02。还有不要在末尾看到他的换行符0D 0A怎么办?????
kampan 2005-11-03
  • 打赏
  • 举报
回复

将s1 := s1 + Chr(PByte(Integer(@s3)+i)^)改为
s1 := Chr(PByte(Integer(@s3)+i)^)+s1 ;

就ok了吧
我不要昵称 2005-11-03
  • 打赏
  • 举报
回复
to DDGG(叮叮当当) :能不能让它保存成00 BC 61 4E??按高位保存呢??谢谢。
另外问一下,用二进制文件,或用TFileStream类怎么做??
DDGG 2005-11-03
  • 打赏
  • 举报
回复
重新贴一下:

procedure Tfrm_save.btn_saveClick(Sender: TObject);
var cn_file:TextFile; //这是文本文件格式,但也可以保存16进制的数据
s3:Integer; // 既然是16进制数据,就应该是数值而不是字符串
s1:string;
i: Integer;
begin
s3:=12345678; // 同上
AssignFile(Cn_file,'c:\diskinfo.sbj');
Reset(cn_file);
for i:=0 to SizeOf(s3)-1 do
s1 := s1 + Chr(PByte(Integer(@s3)+i)^);
Rewrite(cn_file);
Writeln(cn_file,s1);
closefile(cn_file);
end;

用ultraedit打开文件,除了看到4E 61 BC 00以外,还将看到末尾有0D 0A,因为写文本格式的文件时是会自动附加换行和回车符的。

要完全由自己控制文件的数据,用二进制文件,或用TFileStream类。
DDGG 2005-11-03
  • 打赏
  • 举报
回复
忘了定义循环变量i
自己加上即可
DDGG 2005-11-03
  • 打赏
  • 举报
回复
procedure Tfrm_save.btn_saveClick(Sender: TObject);
var cn_file:TextFile; //这是文本文件格式,但也可以保存16进制的数据
s3:Integer; // 既然是16进制数据,就应该是数值而不是字符串
s1:string;
begin
s3:=12345678; // 同上
AssignFile(Cn_file,'c:\diskinfo.sbj');
Reset(cn_file);
for i:=0 to SizeOf(s3) do
s1 := s1 + Chr(PByte(Integer(@s3)+i)^);
Rewrite(cn_file);
Writeln(cn_file,s1);
closefile(cn_file);
end;

用ultraedit打开文件,你看到的应该是4E 61 BC 00,因为数值是从低位保存的。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧