Acr*_*ron 0 delphi buffer pointers
var Buffer: TMemoryStream
Run Code Online (Sandbox Code Playgroud)
代码:
Move((PByte(Buffer.Memory)+Buffer.Position)^, Buffer.Memory^, Buffer.Size - Buffer.Position);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这是不可能的:运算符不适用于此类操作数.
那么我怎样才能获得MemoryBuffer的起点?
您只能从字符指针中添加/减去整数.来自Delphi的帮助:
您可以使用+和 - 运算符来递增和递减字符指针的偏移量.您还可以使用 - 来计算两个字符指针的偏移之间的差异.以下规则适用.
如果我是一个整数而P是一个字符指针,则P + I将I加到P给出的地址; 也就是说,它返回一个指向P之后的地址I字符的指针(表达式I + P等于P + I.)P - I从P给出的地址中减去I; 也就是说,它返回一个指向P之前的字符I的指针.这对于PChar指针是正确的; 对于PWideChar指针P + I将SizeOf(WideChar)添加到P.
如果P和Q都是字符指针,则P-Q计算P(高位地址)给出的地址与Q给出的地址(低位地址)之间的差值; 也就是说,它返回一个表示P和Q之间字符数的整数.未定义P + Q.
试试这个:
Move((PAnsiChar(Buffer.Memory)+Buffer.Position)^, Buffer.Memory^, Buffer.Size - Buffer.Position);
Run Code Online (Sandbox Code Playgroud)