stream中有一个字节是整数,我想把它读出来,放进一个integer变量中,怎么做?还有一个问题
stream中比如从5字节开始,是一个5位的字条串"abcde",我想把它读出来放进一个string变量中,怎么做?

解决方案 »

  1.   

    var
      strm : TStringStream;
      s : string;
    begin
      strm := TStringStream.Create;
      try
        strm.WriteString('1ab3c');
        strm.Position := 0;
    //    strm.Position := 3;
        s := strm.ReadString(1);
      finally
        strm.Free;
      end;
    end;
      

  2.   

    var
      strm : TStringStream;
      s : string;
    begin
      strm := TStringStream.Create;
      try
        strm.WriteString('1ab3c');  //写入字符串   
        strm.Position := 0;    //设定读取位置
        s := strm.ReadString(1); //参数为读取的长度    //s为读取的结果, lz根据情况作类型转换即可
      finally
        strm.Free;
      end;
    end;
      

  3.   

    用 stream 处理结构化数据需要编码解码,每段数据由 head 和 body 组成。head 是定长的,用来标志数据类型和长度(或许还有应用所需的其他标志),body 包含数据本身。读 stream 时,总要先读出 head,然后根据其中的标志读 body。因为 head 中有长度标志,所以这样一路读下去也不会错位。像多媒体流那是很复杂的编码,只要读写都遵循同样的规范就不会出错。
      

  4.   

    stream中有一个字节是整数,我想把它读出来,放进一个integer变量中,怎么做?这问题还没人来答
      

  5.   


    类似下边的代码
    ---------------
    var
      s : string;
      n : integer;
    begin
      s := strm.ReadString(1);  //读出字符存入s
      if s 是字符 then
        n := strtoint(s);
    end;
      

  6.   


    var
      strm : TStringStream;
      s : string;
      n : integer;
    begin
      strm := TStringStream.Create;
      try
        strm.WriteString('1ab3c');  //写入字符串   
        strm.Position := 0;    //设定读取位置
        s := strm.ReadString(1); //参数为读取的长度
        //已知s的值为'1', 所以直接转整形了, 实际应用中不能这么干
        n := strtoint(s);  
      finally
        strm.Free;
      end;
    end;
      

  7.   

    从 stream 读 Integer 很容易。假如 Strm 是 TStream,N 是 Integer,则:
    Strm.Read(N, SizeOf(N));   // 整数读到变量 N 中当初必须是这样把整数写进  stream 中去:
    Strm.Write(N, SizeOf(N));即使是 record 类型,也可以这样读写。当然,record 内部成员必须定长。如果有不定长数组和字符串之类的变量,就会读错。
      

  8.   

    噢,你的结果不对呀。不妨把这个流保存到文件中(最好就写个小整数,别的不写),然后看看文件的二进制码,应该就是你写的整数值(不是 ASCII 码),而且是四个字节。要不是这样,那就是写错了。
      

  9.   

    const
    a1:array[0..3] of Byte=($00,$00,$00,$12);
    var
    ss:TStringStream;
    iC:Integer;
    begin
      ss:=TStringStream.Create('');
      try
        ss.Write(a1,sizeof(a1));
        ss.Position:=2;
        ss.Read(iC,sizeof(Integer));
      finally
        ss.Free;
      end;
      ShowMessage(IntToStr(iC));
    end;iC应该=18,但运行下来iC是个很大的数字
      

  10.   

    感觉  ss.Write(a1,sizeof(a1)) 这种写法似乎有问题。a1 在这里是数组地址。按 Delphi 的定义,这里应该是变量,由编译程序把它转换成地址。是否可以改成  ss.Write(a1[0],sizeof(a1))?其实可以不用数组,直接把一个四字节整数写进去就行。再者,你从 position = 2 开始读,只剩两个字节可以读出了。iC 是四字节的,这样高位两个字节没有被覆盖,iC 又未初始化,其初值未必是 0。