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

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写的,以前觉得动态数据结构没用,现在知道错了。


...全文
7 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
关注
回复
相关推荐
发帖
网络通信/分布式开发
创建于2007-08-02

1573

社区成员

Delphi 网络通信/分布式开发
申请成为版主
帖子事件
创建了帖子
2003-05-08 03:30
社区公告
暂无公告