实在是不好意思问这个问题,可是实在是不记得了

killerliu 2003-05-08 03:30:44
偶很久没写过程序了,以前做数据库倒文本的时候都用过的。
就是,
var
startadd:pointer;
len:integer;
begin
getmem(startadd^,100);
socket.receivebuf(startadd^,len);
end;

我现在要写个decode把内存里的这一堆东西转到一个
type
receivepack = record
cmdtype:int;
sjhm:string;
textlength:short;
text:string;
end;
里面去,我知道从这个记录怎么转到buffer,可是怎么变回来?
cmdtype:=startadd^;?这个我知道不对。真的想不起来了,还有就是pointer加一怎么加的啊?我近两年都没写过关于指针的了,都是做数据库开发,涉及到这个都是用inline assemble写的,以前觉得动态数据结构没用,现在知道错了。


...全文
31 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
killerliu 2003-05-08
  • 打赏
  • 举报
回复
我觉得startadd还是只能用pointer类型,可是该怎么写啊?
:((
killerliu 2003-05-08
  • 打赏
  • 举报
回复
我改了一下
type
Treceivepack = record
cmdtype:int;
sjhm:string[11];
end;
preceivepack = ^Treceivepack;
var
startadd:preceivepack;
len:integer;
begin
new(startadd);
getmem(startadd^,socket.receivelength);
socket.receivebuf(startadd^,len);
end;

现在问题是这样,startadd^.cmdtype是对的,可是sjhm还是有错,另外如果不说明string长度的话?就是象我开始那样用一个变量表明字串长,那该怎么办啊?


killerliu 2003-05-08
  • 打赏
  • 举报
回复
str:=char(p^)?
是这样吧?
可是
a:byte;
a:=byte(p^)怎么不对?
killerliu 2003-05-08
  • 打赏
  • 举报
回复
我好像想起来一点了,试试先,如果我没有那个结构体的话,是不是可以这样读一下?
str:=pchar(p)^;????
yansea 2003-05-08
  • 打赏
  • 举报
回复
不用管那个,就是一个socket.receivebuf保证得到一个完整的数据就可以

preceivepack(p)^.sjhm
killerliu 2003-05-08
  • 打赏
  • 举报
回复
可是,treceivepack是变长的啊,里面有string类型。
ok,那我说简单一点,我只有一点不记得了
var
p:pointer;
begin
getmem(p^,socket.receivelength);
socket.receivebuf(p^,len);
现在怎么把这些数据读出来?
yansea 2003-05-08
  • 打赏
  • 举报
回复
new(startadd);//已经给这个指针分配了空间;
getmem(startadd^,socket.receivelength);//这样再分配没有必要
我觉得socket中若数据大小正好为 sizeof(Treceivepack),且内容正确那读出应该没有问题。
failer 2003-05-08
  • 打赏
  • 举报
回复
关注

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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