谁能把下面的C++转换成DelphiHEXPACKET *createHexPacket(char *pCharData) { int nLen = 0;
char cHex[10];
int i = 0;
long n = 0;
HEXPACKET *pHexPacket = NULL; nLen = strlen(pCharData); pHexPacket = (HEXPACKET *) malloc( sizeof(HEXPACKET) );
pHexPacket->data = (unsigned char *) malloc(nLen/2);
pHexPacket->size = nLen / 3 + 1;
memset(pHexPacket->data, 0, nLen/2); for ( i=0; i<nLen; i+= 3) {
memset(cHex, 0, sizeof(cHex));
sprintf(cHex, "0x%c%c", pCharData[i], pCharData[i+1]);
n = strtol(cHex, NULL, 16);
memset(pHexPacket->data+(i/3), (int)n, 1); /* if we don't have a whitespace somethings wrong */
if ( nLen>i+2 && pCharData[i+2] != ' ' ) {
freeHexPacket(pHexPacket);
return NULL;
} } return pHexPacket;}
char cHex[10];
int i = 0;
long n = 0;
HEXPACKET *pHexPacket = NULL; nLen = strlen(pCharData); pHexPacket = (HEXPACKET *) malloc( sizeof(HEXPACKET) );
pHexPacket->data = (unsigned char *) malloc(nLen/2);
pHexPacket->size = nLen / 3 + 1;
memset(pHexPacket->data, 0, nLen/2); for ( i=0; i<nLen; i+= 3) {
memset(cHex, 0, sizeof(cHex));
sprintf(cHex, "0x%c%c", pCharData[i], pCharData[i+1]);
n = strtol(cHex, NULL, 16);
memset(pHexPacket->data+(i/3), (int)n, 1); /* if we don't have a whitespace somethings wrong */
if ( nLen>i+2 && pCharData[i+2] != ' ' ) {
freeHexPacket(pHexPacket);
return NULL;
} } return pHexPacket;}
var
nLen, i:integer;
cHex: array[0..9] of char;
n: int64;
apHexPacket: PHEXPACKET;begin
// nLen = 0;
// char cHex[10];
// int i = 0;
// long n = 0;
// HEXPACKET *pHexPacket = NULL; nLen := strlen(pCharData); GetMem(pHexPacket, sizeof(HEXPACKET));
// pHexPacket := (HEXPACKET *) malloc( sizeof(HEXPACKET) );
GetMem(pHexPacket^.data, nLen/2);
// pHexPacket->data = (unsigned char *) malloc(nLen/2);
pHexPacket^.size := nLen div 3 + 1; FillChar(pHexPacket^.data, nLen div 2, 0);
// memset(pHexPacket->data, 0, nLen/2); for i=0 to nLen
begin
FillChar(cHex, sizeof(cHex), 0);
// memset(cHex, 0, sizeof(cHex));
// sprintf(cHex, "0x%c%c", pCharData[i], pCharData[i+1]);
n := StrToInt(cHex); //strtol(cHex, NULL, 16);
// memset(pHexPacket->data+(i/3), (int)n, 1);
FillChar(pHexPacket^.data + i, n, 1); if (nLen>i+2) and (pCharData[i+2] <> ' ' ) then
begin
freeHexPacket(pHexPacket);
result := nil;
exit;
end; result := pHexPacket;
end;
unsigned int size;
unsigned char *data;
} HEXPACKET;
佩服ing
unsigned int size;
unsigned char *data;
} HEXPACKET;type HEXPACKET = record
size: Cardinal;
data: array of BYTE; // 其长度就是这个size 不过这样转换会复杂了点
end;应该不需要200‘把
PHexPacket = ^THexPacket;
THexPacket = packed record
Size: Integer;
Data: PChar;
end;通货膨胀,没办法
PHexPacket = ^THexPacket;
THexPacket = packed record
Size: Integer;
Data: PChar;
end;这样 也可以的 反正自己知道怎么分配空间 怎么读取 一致就可以了.
我觉得还是C++的指针好用 或者说我对DELPHI的指针还不是很熟悉吧 哈 通货膨胀也要不了这么多吧 50’足以
出错
pHexPacket=^THexPacket;
THexPacket=packed Record //用不用packed 看 c的pragma pack是否为1
size:uint;
data:PChar;
end; function createHexPacket(pCharData:PChar):pHexPacket;
var
nLen :integer;
cHex:array[0..9] of char;//不需要
i:integer;
n:integer;
pPacket:pHexPacket ;
begin
nLen:= strlen(pCharData);
new(pPacket);
pPacket^.data:= AllocMem(nLen div 2); //自动清0,不必memset清
pPacket^.size:= nLen div 3 + 1;
i:=0;
while i<nLen do
begin
fillchar(cHex,sizeof(cHex),#0);
n:= StrToInt('$'+pCharData[i]+pCharData[i+1]);
fillchar(pPacket^.data[i div 3],1,n);
if ( nLen>i+2) and (pCharData[i+2] <>' ' ) then
begin
freeHexPacket(pPacket);
Result:=Nil;
exit;
end;
inc(i,3);
end;
Result:=pPacket;
end;
寻C++、Delphi全能高手,200分(之二)
http://community.csdn.net/Expert/topic/3337/3337196.xml?temp=.3753778