2

私はバイナリファイル構造で作業しています。データを読み取るためのコード例は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によって参照されているものを正確に説明するのを手伝ってもらえますか?

4

2 に答える 2

4

関連するコードのビットは

FixLeaderType *FLdrPtr; 
unsigned char RcvBuff[8192]; 

FLdrPtr = (FixLeaderType *)&RcvBuff [ HdrPtr->Offset[0] ]; 
  1. FldPtrタイプFixLeaderType *、またはへのポインタFixLeaderTypeです。
  2. RcvBuffの配列ですchar
  3. HdrPtr->Offset[0]ushort値に解決されるためRcvBuff [ HdrPtr->Offset[0] ]、値が生成されcharます。
  4. は、アドレス&の値を取得する代わりに、値のcharアドレスが返されることを意味します。これは、タイプがであることを意味することに注意してくださいchar *
  5. char *タイプは、に割り当てるのに間違ったタイプですFldPtr。は(FixLeaderType *)、タイプを有効になるように変換します。これはキャスト操作と呼ばれます。
于 2010-04-27T13:56:58.260 に答える
3

私はあなたがそれらのようなものを読むべきだと思います:

* = pointer to

& = address of

それは物事をはるかに簡単にします

于 2010-04-27T13:43:07.267 に答える