我正在使用二进制文件结构。读取数据的代码示例在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到底引用了什么吗?

最佳答案

相关的代码位是

FixLeaderType *FLdrPtr;
unsigned char RcvBuff[8192];

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



FldPtr的类型为FixLeaderType *或指向FixLeaderType的指针。
RcvBuffchar的数组。
HdrPtr->Offset[0]解析为ushort值,因此RcvBuff [ HdrPtr->Offset[0] ]产生一个char值。
&表示返回值的地址而不是获取char的值。请注意,这意味着它的类型为char *
char *类型是分配给FldPtr的错误类型。 (FixLeaderType *)转换类型,使其有效。这称为强制转换操作。

关于c - 将C指针代码示例转换为Delphi指针语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2721509/

10-13 04:57