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

将C指针代码示例转换为Delphi指针语法,c,delphi,pointers,translate,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 DistanceToBin1Mid

我正在使用二进制文件结构。读取数据的代码示例是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] ];
据我所知,
[hdrpr->Offset[0]
是否将从HdrPtr指向的HeaderType结构返回第一个偏移量数组项的值?因此相当于
HdrPtr^.Offset[0]

然后
&RcvBuff[HdrPtr->Offset[0]
应该返回包含已索引的RcvBuff数组项的值的内存地址,因此相当于
@RecBuff[HdrPtr^.Offset[0]]


然后我就迷上了
(FixLeaderType*)…
。有人能准确地解释一下FldrPtr引用的是什么吗?

我想你应该阅读以下内容:

* = pointer to

& = address of

这使事情变得容易得多

相关的代码位是

FixLeaderType *FLdrPtr; 
unsigned char RcvBuff[8192]; 

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

  • 非常感谢。打字操作是我遗漏的一点。这就足够让我继续下去了。干杯