将C指针代码示例转换为Delphi指针语法

时间:2010-04-27 13:19:40

标签: c delphi pointers translate

我正在使用二进制文件结构。读取数据的代码示例是在C中,我需要在Delphi中读取它。我赶紧补充一点,我没有C编程经验。

鉴于以下内容

typedef struct {
uchar ID, DataSource;
ushort ChecksumOffset;
uchar Spare, NDataTypes;
ushort Offset [256];
} HeaderType; 

...

typedef struct {
ushort ID;
...
ushort DistanceToBin1Middle,TransmitLength;
} FixLeaderType;

...

HeaderType *HdrPtr;
FixLeaderType *FLdrPtr;

unsigned char RcvBuff[8192];
void DecodeBBensemble( void )
{
unsigned short i, *IDptr, ID;
FLdrPtr = (FixLeaderType *)&RcvBuff [ HdrPtr->Offset[0] ];
if (FLdrPtr->NBins > 128)
FLdrPtr->NBins = 32;

...

我遇到困难的一点是:

FLdrPtr = (FixLeaderType *)&RcvBuff [ HdrPtr->Offset[0] ];

从我理解的很少,[ HdrPtr->Offset[0] ];将从HdrPtr指向的HeaderType结构返回第一个Offset数组项的值?那相当于HdrPtr^.Offset[0]

那么&RcvBuff [ HdrPtr->Offset[0] ];应该返回包含索引的RcvBuff数组项值的内存地址,等同于@RecBuff[HdrPtr^.Offset[0]]

然后我迷失了(FixLeaderType *)..。有人可以帮助解释FldrPtr引用的确切内容吗?

2 个答案:

答案 0 :(得分:4)

相关的代码位是

FixLeaderType *FLdrPtr; 
unsigned char RcvBuff[8192]; 

FLdrPtr = (FixLeaderType *)&RcvBuff [ HdrPtr->Offset[0] ]; 
  1. FldPtr的类型为FixLeaderType *,或指向FixLeaderType的指针。
  2. RcvBuffchar
  3. 的数组
  4. HdrPtr->Offset[0]解析为ushort值,因此RcvBuff [ HdrPtr->Offset[0] ]会产生char值。
  5. &表示不会获取char的值而是返回值的地址。请注意,这意味着它的类型为char *
  6. char *类型是要分配给FldPtr的错误类型。 (FixLeaderType *)转换类型以使其有效。这称为演员表演。

答案 1 :(得分:3)

我认为你应该阅读以下内容:

* = pointer to

& = address of

让事情变得容易