关于TStringStream的问题

coolspac 2008-04-29 02:00:20
问题是这样的
有个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的值,有什么办法?
每个字符串的长度是不固定的。
...全文
499 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
这个简单啊,网上搜一下就得到答案了.
skylkj 2008-04-29
  • 打赏
  • 举报
回复
....... 中间带#0的不是正常的字符串啦,用pos应该不行

其实我觉得自己写个算法处理下应该不麻烦吧....
coolspac 2008-04-29
  • 打赏
  • 举报
回复
经过测试
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
coolspac 2008-04-29
  • 打赏
  • 举报
回复
我想实现的最理想的方案是一次将这些数据全部读进对应的变量里,但是因为长度变量长度可变,好像不行

帮助么,我是一直搜索find相关函数去了
skylkj 2008-04-29
  • 打赏
  • 举报
回复
pos()
delphi自带的帮助你有用法
coolspac 2008-04-29
  • 打赏
  • 举报
回复
delphi中没有返回string中 某一字串的第一次出现的位置的函数么?
skylkj 2008-04-29
  • 打赏
  • 举报
回复
用Tmemorystream或者其他随便什么stream把二进制文件读到内存
然后从头一个字节一个字节的读,读到第一个不是0的字节,就是字符串1的开始,再读到下一个0,就是字符串1的结束....依此类推...

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧