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啊???

解决方案 »

  1.   

    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,因为数值是从低位保存的。
      

  2.   

    重新贴一下: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类。
      

  3.   

    to DDGG(叮叮当当) :能不能让它保存成00 BC 61 4E??按高位保存呢??谢谢。
    另外问一下,用二进制文件,或用TFileStream类怎么做??
      

  4.   


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

  5.   

    那么要求12345678保存成00 BC 61 4E,而20051102怎么原样保存进16进制文件呢?即20 05 11 02。还有不要在末尾看到他的换行符0D 0A怎么办?????
      

  6.   

    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.
      

  7.   

    你用无类型文件一切就可以解决了,或者用TFileStream这个类能更好的操作,你可以试一下