procedure TForm1.Button1Click(Sender: TObject);
type
TMyRecord = packed record
    head: array[0..3] of Char;
    aa:byte;
    bb:word;
    cc:longword;
  end;
var
    mr:TMyRecord;
begin
    mr.head:='abbc';
    mr.aa:=7;
    mr.bb:=255;
    mr.cc:=1677215;
    showmessage(mr.head+','+inttostr(mr.aa)+','+inttostr(mr.bb)+','+inttostr(mr.cc))
end;

解决方案 »

  1.   

    谢谢netlib(河外孤星) 
    我的aa bb cc中已经有数据了
    我想正确的读出
    我可以读出,但是总是不正确
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    这样写
    type
    TMyRecord = packed record
        head: array[0..3] of Char;
        aa:byte;
        bb:word;
        cc:longword;
      end;
    var
        mr:TMyRecord;
        F:TFileStream;
    begin
        F:=Tfilestream.create('E:\temp.ddd',fmcreate);
        mr.head:='abbc';
        mr.aa:=7;
        mr.bb:=255;
        mr.cc:=1677215;
        F.write(mr,sizeof(TMyRecord));
        showmessage(mr.head+','+inttostr(mr.aa)+','+inttostr(mr.bb)+','+inttostr(mr.cc))
        F.free;
    end;这样读
    type
    TMyRecord = packed record
        head: array[0..3] of Char;
        aa:byte;
        bb:word;
        cc:longword;
      end;
    var
        mr:TMyRecord;
        F:TFileStream;
    begin
        F:=Tfilestream.create('E:\temp.ddd',fmopenread);
        F.read(mr,sizeof(TMyRecord));
        showmessage(mr.head+','+inttostr(mr.aa)+','+inttostr(mr.bb)+','+inttostr(mr.cc))
        F.free;
    end;不行吗?
      

  3.   

    //请你调试调试看
    procedure Reverse(var mBuffer; mSize: Integer);
    var
      I: Integer;
      B: Byte;
    begin
      for I := 0 to (mSize - 1) div 2 do begin
        B := TByteArray(mBuffer)[I];
        TByteArray(mBuffer)[I] := TByteArray(mBuffer)[mSize - I - 1];
        TByteArray(mBuffer)[mSize - I - 1] := B;
      end;
    end; { Reverse }procedure TForm1.Button1Click(Sender: TObject);
    type
     TMyRecord = packed record
        head: array[0..3] of Char;
        aa:byte;
        bb:word;
        cc:longword;
      end;
      PMyRecord = ^TMyRecord;
    var
      vMyRecord: PMyRecord;
    begin
      //你的代码  Reverse(vMyRecord^.bb, SizeOf(Word));
      Reverse(vMyRecord^.cc, SizeOf(LongWord));
    end;
      

  4.   

    F:=Tfilestream.create('E:\temp.ddd',fmcreate);
    出现efcreateerror错误
    您的办法是可以取出数的,可是我也用这种办法无法取出正确的数
    不过先谢谢
      

  5.   

    zswang大哥,您的代码什么地方出结果呀
    我的代码到底应该在那呢
      

  6.   

    zswang大哥,您的代码什么地方出结果呀
    我的代码到底应该在那呢
      

  7.   

    你把包的数据的复制给我function BufferToDisplay(const mBuffer; mSize: Integer): string;
    var
      I: Integer;
    begin
      Result := '';
      for I := 0 to mSize - 1 do try
        Result := Result + IntToHex(TByteArray(mBuffer)[I], 2);
      except
        Result := '';
        Exit;
      end;
    end; { BufferToDisplay }Edit1.Text := BufferToDisplay(Data, 11); //调用还有你想要的结果00 00 00 01 | 00 00 00 00  (1)//数值型的存储
    00 00 00 00 | 10 00 00 00  (1)//包的存储00 00 01 01 | 00 00 00 00  (5)//数值型的存储
    00 00 00 00 | 10 10 00 00  (5)//包的存储可能是我分析的有错误
      

  8.   

    好象可以吧.type
        Pmytype=^Tmytype;
        Tmytype=record
            head:array[0..3] of byte;
            aa:byte;
            bb:word;
            cc:dword;
        end;
        
    procedure TForm1.Button1Click(Sender: TObject);
    var
        fstream:tfilestream;
        a:tmytype;
    begin
        with a do
        begin
            pchar(head):='hoho';
            aa:=100;
            bb:=2000;
            cc:=3000;
        end;
        fstream:=tfilestream.Create('f:\kk.txt',fmcreate);
        fstream.write(a,sizeof(a));
        fstream.free;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
        fstream:tfilestream;
        a:tmytype;
    begin
        fstream:=tfilestream.create('f:\kk.txt',fmopenread);
        fstream.Read(a,sizeof(a));
        with a do
        begin
            showmessage(pchar(head));
            showmessage(inttostr(aa));
            showmessage(inttostr(bb));
            showmessage(inttostr(cc));
        end;
        fstream.free;
    end;
      

  9.   

    F:=Tfilestream.create('E:\temp.ddd',fmcreate);
    出现efcreateerror错误
    是不是你没有E:盘,或有这个文件而被别人用。
      

  10.   

    zswang(伴水)(* 嘻嘻 *) 
    大哥
    我的数据已经有些眉目了
    就是靠您的办法
    不过您的办法对4个字节的很有效
    对2个字节的好像不管用
    我回头再看看
    如果您有时间,可不可以稍微解释一下procedure Reverse(var mBuffer; mSize: Integer);
    看了您的指导确实有提高
    分数回头等一会结吧
    把看的机会留给更多人
    谢谢了
    厉害
    我什么时候才能这样
      

  11.   

    F:=Tfilestream.create('E:\temp.ddd',fmcreate);
    出现efcreateerror错误
    是不是你没有E:盘,或有这个文件而被别人用。
      

  12.   

    netlib(河外孤星) 
    大哥,您的程序我看了
    主要是我的数据是动态从内存槽里读出
    可能您的程序我还没弄明白
    回头我再看看
    不过这里也谢了
    大家都辛苦了
    还有robinhunter(深空) 
    大家要多少分说吧
    兄弟一定满足
    主要是任务快到期了
    ^_^
      

  13.   

    procedure Reverse(var mBuffer; mSize: Integer); //将缓冲区反序
    //mBuffer: 缓冲区//是一个无类型实在参数
    //mSize: 缓冲区的大小////Demo
    procedure TForm1.Button1Click(Sender: TObject);
    var
      P: array[0..4] of Char;
    begin
      P := '12345';
      Reverse(P, 4);
      Caption := P;
    end;
      

  14.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      P: array[0..4] of Char;
    begin
      P := '12345';
      Reverse(P, 4);
      Caption := P;
    end;
      

  15.   

    呵呵,给 zswang(伴水)(* 嘻嘻 *) 
    他帮你解决了,他的方法好。
    我刚才没太明白你的意思,不好意思了。
      

  16.   

    呵呵,给 zswang(伴水)(* 嘻嘻 *) 
    他帮你解决了,他的方法好。
    我刚才没太明白你的意思,不好意思了。