是否无法通过类型转换访问TidBytes缓冲区内存中的数据?说我有:
type
TMyRecord = packed record
Field1 : integer ;
Field2 : packed array [0..1023] of byte ;
end ;
var
Buffer : TIdBytes ;
MyRecord : TMyRecord ;
begin
IdTCPClient1.IOHandler.ReadBytes (Buffer, SizeOf (TMyRecord), false) ;
with TMyRecord (Buffer) do // compiler snags with "invalid typecast"
...
好的,我可以使用:
BytesToRaw (Buffer, MyRecord, SizeOf (TMyRecord)) ;
但没有办法直接访问数据而没有复制它的开销吗?
答案 0 :(得分:3)
是否无法通过类型转换访问TidBytes缓冲区内存中的数据?
TIdBytes
是一个动态数组字节,因此如果要以任何特定格式解释其原始字节,则必须使用类型转换。
没有办法直接访问数据而没有复制它的开销吗?
动态数组由编译器/ RTL实现为指向内存中其他位置分配的块的指针。因此,您可以使用指针类型转换来解释块的内容,例如:
type
PMyRecord = ^TMyRecord;
TMyRecord = packed record
Field1 : integer ;
Field2 : packed array [0..1023] of byte ;
end ;
var
Buffer: TIdBytes ;
begin
IdTCPClient1.IOHandler.ReadBytes (Buffer, SizeOf(TMyRecord), false) ;
with PMyRecord(Buffer)^ do
...
end;