1、如:
VC中:
char cmdBuf[50];
strncpy(cmdBuf+7, sParam1.c_str(), 17);
var
sbuff : array[0..49] of char;
但subff偏移七位 并且付值?用Delphi如何实现?
2、 如VC中: (char*)&unDataLen unDataLen 是uint类型,个人理解是Uint类型按装char偏移 ,那么在Delphi中如何实现呢?
VC中:
char cmdBuf[50];
strncpy(cmdBuf+7, sParam1.c_str(), 17);
var
sbuff : array[0..49] of char;
但subff偏移七位 并且付值?用Delphi如何实现?
2、 如VC中: (char*)&unDataLen unDataLen 是uint类型,个人理解是Uint类型按装char偏移 ,那么在Delphi中如何实现呢?
subff : array[0..49] of char;@subff[0]是第一个元素地址,@subff[7]是从第一个元素偏移7字节的地址
在StrPCopy等函数里,可以直接使用这样的地址2、我不懂
VC中:
char cmdBuf[50];
strncpy(cmdBuf+7, sParam1.c_str(), 17);
var
sbuff : array[0..49] of char;
但subff偏移七位 并且付值?用Delphi如何实现?var
sbuff : array[0..49] of char;Move(PAnsiChar(srcString)^, (sbuff + 7)^, 17);
or
Move(PAnsiChar(srcString)^, sbuff[6], 17);
2、 如VC中: (char*)&unDataLen unDataLen 是uint类型,个人理解是Uint类型按装char偏移 ,那么在Delphi中如何实现呢? (char*)&unDataLen 表示:取unDataLen地址,并将该地址强制转换成char*指针。类似Delphi操作:
var
unDataLen: Integer;@unDataLen
or
PAnsiChar(@unDataLen)
var
subff : array[0..6] of char = ('1','2','3','a','b','c',#0);
a: array[0..6] of char = ('u','v','w','x','y','z',#0);procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage(string(subff));
move(subff[3], subff[0], 3);
Showmessage(string(subff));
StrPCopy(@subff[3], StrPas(@a[3]));
Showmessage(string(subff));
CopyMemory(@subff[0], @a[0], 3);
Showmessage(string(subff));
end;
unit undatalen;
(char*)&unDataLen
recv( sockTrgClient, (char*)&unDataLen +i, 4-i, 0 );在D中
recv( sockSDFSClient,PAnsiChar(@unIdleBlocks), 4,0);去报错:
[错误] UnitSDFSOperate.pas(77): Constant object cannot be passed as var parameter
如果带上偏移
recv( sockSDFSClient,Pointer(integer(@unIdleBlocks) + nPos)^, 4,0);如果unIdleBlocks本身是指针型的变量,如:String,P结构,PChar等,则是
recv( sockSDFSClient,Pointer(unIdleBlocks)^, 4,0);
{
bHasError = TRUE;
break;
}
UINT unImgSize = *((UINT*)pRecvBuf);
红字部分如何用Delphi实现?? pRecvBuf : array of byte;
UINT unImgSize = *((UINT*)pRecvBuf);var
unImgSize: Integer;
pRecvBuf: array [0..xxx] of Byte;
unImgSize := PInteger(pRecvBuf)^;
unImgSize := PInteger(@pRecvBuf[0])^;C/C++里面的东西,有些能直接译,有些是pascal的语法,就像无类型参数
像pascal的写法是这样:
procedure test(var aaa; const bbb; ccc: Pointer);
像对应C/C++就是:
void test(void *aaa; char *bbb; int []ccc);