请教:怎么把字符串读到数组里?procedure TForm1.Button3Click(Sender: TObject);
var
    s1:string;
    s2:string;
    filename: string;
    m1:TMemoryStream;
    buffer:array of byte;begin
    s1:='123';
    s2:='456';
    filename:=ExtractFilePath(paramstr(0))+'01.bmp';
    m1:=m1.Create;
    m1.LoadFromFile(filename);
    //现在怎么把 字符串 '123' '456' 和 流读到 数组 buffer;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
     len:longint;
     buffer:array of byte;
     m1:TMemoryStream;
begin
     len:=Socket.ReceiveLength;
     Socket.ReceiveBuf(buffer,len);
     //现在怎么得到 字符串 '123' '456' 和 流 m1
end;谢谢!    

解决方案 »

  1.   

    动态数组要先分配数组大小
    setlenght(buffer,m1.size); //根据m1的大小分配
    然后直接读出就OK了
    m1.read(buffer,sizeof(buffer));
      

  2.   

    分配大小是SetLength, 手误了,汗
      

  3.   

    谢谢大哥:
    procedure TForm1.Button3Click(Sender: TObject);
    var
        s1:string;
        s2:string;
        filename: string;
        m1:TMemoryStream;
        buffer:array of byte;begin
        s1:='123';
        s2:='456';
        filename:=ExtractFilePath(paramstr(0))+'01.bmp';
        m1:=m1.Create;
        m1.LoadFromFile(filename);
        //现在怎么把 字符串 '123' '456' 和 流读到 数组 buffer;
    end;//现在怎么把 字符串 '123' '456' 和 流读到 数组 buffer;
    希望通过 CopyMemory 来实现?谢谢!
      

  4.   

    IdTCPClient可以直接WriteStream//---------写入
    var
      s:string;
      sbuf: array[0..2] of Byte;
    begin
      s:='123';
      mov( s, sbuf,sizeof( sbuf ) );
      ms.Position:=0;//写入buf的位置
      ms.writebuffer( sbuf, sizeof( sbuf ) );
    end;//---------读取
    ms.Position:=0;//取buf的起始位置
    ms.ReadBuffer( buf,sizeof( buf ) );
      

  5.   

    谢谢大哥:
    还有两个问题:
    问题1:
    sbuf: array[0..2] of Byte;假设我开始不知道数组的长度sbuf:array of byte;那么程序要怎么写呢?问题2:
    提示 mov 没有定义?谢谢!
      

  6.   

    SetLength分配大小
    SetLength(sbuf,3);