gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:17:27 26 4
gpt4 key购买 nike

我正在使用二进制文件结构。读取数据的代码示例是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^。偏移[0]] ?

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

最佳答案

相关的代码位是

FixLeaderType *FLdrPtr; 
unsigned char RcvBuff[8192];

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com