G
gardenwood
Unregistered / Unconfirmed
GUEST, unregistred user!
type
PByte=^Byte;
PWord=^Word;
PArrayByte=array of Byte;
Envelop=record
ProtocolSap: Byte;
Reserved: Byte;
MessageLength: Word;
end;
SscopStruct=record
Head: Envelop;
pBuf: PByte;
end;
问题1:delphi里有没有字节对齐一说? 在c里是没有的,所以我必须加保留字对齐结构。
问题2:由于数据量很大,而且是无间断的发送,所以我不希望程序内部copy数据。所以,我把放数据的Buf定义为PByte.
在Atm送来的数据通过UDP接受到以后,是一个Byte Content[MAX_DATA_NUM], 数据的长度又我Enevlop里的消息长度计算出来,
我直接把pBuf:=Content,这样可以吗?以后的操作就直接移动pBuf的指针,只要不越界就OK.另外,delphi里是不是也是
认为数组的地址就是它的名字? 即Content就是Content数组的地址? 要不我是否该pBuf:=@Content?
问题3,Atm来的数据是按照上面的SscopStruct结构填写的,Udp得到后,放在Byte DadaFromAtm[MAX_DATA_NUM]里,我能否象C里
一样,这样把数据放入结构:
pSscopStruct= ^SscopStruct;
psscopdata: pSscopStruct;
psscopdata:=pSscopStruct(Content);
然后,psscopdata.Head.ProtocolSap得到ProtocolSap值?可我这样得不到啊。
问题4,另外,是不是在delphi里任何一个指针都要new 一下? 在c里,int *p,可以直接用,不需要malloc或者new,但
在delphi里,integer ^p;是不是一定要new?可我不new也好象可以用。
——————————————————————
现在,我已经把数据放在Data[MAX_DATA_NUM]里了,我想传入函数里,通过地址传递
ParaseAtmData(Data,100);
ParaseAtmData(pDataByte;Len:Iteger)
var
pwData: PWord;
begin
pwData:=PWord(pData);
end;
可这样得到pwData^值是错误的,为什么啊?
PByte=^Byte;
PWord=^Word;
PArrayByte=array of Byte;
Envelop=record
ProtocolSap: Byte;
Reserved: Byte;
MessageLength: Word;
end;
SscopStruct=record
Head: Envelop;
pBuf: PByte;
end;
问题1:delphi里有没有字节对齐一说? 在c里是没有的,所以我必须加保留字对齐结构。
问题2:由于数据量很大,而且是无间断的发送,所以我不希望程序内部copy数据。所以,我把放数据的Buf定义为PByte.
在Atm送来的数据通过UDP接受到以后,是一个Byte Content[MAX_DATA_NUM], 数据的长度又我Enevlop里的消息长度计算出来,
我直接把pBuf:=Content,这样可以吗?以后的操作就直接移动pBuf的指针,只要不越界就OK.另外,delphi里是不是也是
认为数组的地址就是它的名字? 即Content就是Content数组的地址? 要不我是否该pBuf:=@Content?
问题3,Atm来的数据是按照上面的SscopStruct结构填写的,Udp得到后,放在Byte DadaFromAtm[MAX_DATA_NUM]里,我能否象C里
一样,这样把数据放入结构:
pSscopStruct= ^SscopStruct;
psscopdata: pSscopStruct;
psscopdata:=pSscopStruct(Content);
然后,psscopdata.Head.ProtocolSap得到ProtocolSap值?可我这样得不到啊。
问题4,另外,是不是在delphi里任何一个指针都要new 一下? 在c里,int *p,可以直接用,不需要malloc或者new,但
在delphi里,integer ^p;是不是一定要new?可我不new也好象可以用。
——————————————————————
现在,我已经把数据放在Data[MAX_DATA_NUM]里了,我想传入函数里,通过地址传递
ParaseAtmData(Data,100);
ParaseAtmData(pDataByte;Len:Iteger)
var
pwData: PWord;
begin
pwData:=PWord(pData);
end;
可这样得到pwData^值是错误的,为什么啊?