问题是这样的
有个TStringStream
里面存有数据,如果存成文件用winhex进行查看
可以看出是这样的一个结构00[字符串1]00[一个无符号整形数i(<65535)]0000[字符串2]00[字符串3]00.....大致就是这么一个结构
举个具体的例子就是将其直接存为二进制文件后是这种文件流:
0062000C00000063006400
这里是字符串1=a,字符串2=b,字符串3=c,字符串4=d,i=12因为其中有00,也就是字符串中的终止符,所以我直接用tstringstream的readstring无法正常将其转化为string但是我现在需要用程序分别取出tstringstream中的 字符串1,字符串2,字符串3...和i的值,有什么办法?
每个字符串的长度是不固定的。

解决方案 »

  1.   

    用Tmemorystream或者其他随便什么stream把二进制文件读到内存
    然后从头一个字节一个字节的读,读到第一个不是0的字节,就是字符串1的开始,再读到下一个0,就是字符串1的结束....依此类推...
      

  2.   

    delphi中没有返回string中 某一字串的第一次出现的位置的函数么?
      

  3.   

    pos()
    delphi自带的帮助你有用法
      

  4.   

    我想实现的最理想的方案是一次将这些数据全部读进对应的变量里,但是因为长度变量长度可变,好像不行帮助么,我是一直搜索find相关函数去了
      

  5.   

    经过测试
    var
    s:string;
    a:integer;
    s:=#1#1#0'dsf'#0'adsf'#0#$EA#0#0#0'sfg'#0'ds'#0;//我首贴说的那种格式类似
    a:=pos(s,'d');得不到正确的pos
      

  6.   

    ....... 中间带#0的不是正常的字符串啦,用pos应该不行其实我觉得自己写个算法处理下应该不麻烦吧....